Friday, 24 October 2014

[CLI] nối dòng

Một bạn giấu tên hỏi: làm thế nào để nối nhiều dòng thành một dòng trong linux ?

Trả lời:
có rất nhiều cách để làm việc này, sau đây là vài cách đơn giản.

Tạo đề bài để test:
# for i in {1000..1005}; do echo $i; done
1000
1001
1002
1003
1004
1005
Xem thêm cách tạo dữ liệu giả ở đây: http://www.familug.org/2012/10/generate-random-data-part1.html

1. tr
$ whatis tr
tr(1)                    - translate characters
# echo """1000
1001
1002
1003
1004
1005""" | tr '\n' ' '; echo
1000 1001 1002 1003 1004 1005
#        
Translate ký tự xuống dòng '\n' thành dấu cách ' '.
echo để xuống dòng sau khi in ra kết cho dễ nhìn.

Để xoá ký tự '\n', dùng tr -d '\n'

2. xargs
Đây không phải là mục đích chính mà xargs được sinh ra, nhưng nó vẫn hoàn thành tốt
$ whatis xargs
xargs(1)                 - construct argument list(s) and execute util
# echo """1000
1001
1002
1003
1004
1005""" | xargs
1000 1001 1002 1003 1004 1005
#
3. python2 
python one-liner!
$ echo -e 'hehe\nhihi' | python -c "import sys; [sys.stdout.write(line.replace('\n', 'meomeo\n')) for line in sys.stdin]"
hehemeomeo
hihimeomeo
Ngắn hơn 1 chút:
$ echo -e 'hehe\nhihi' | python -c "import sys as s; [s.stdout.write(l.replace('\n', 'meomeo\n')) for l in s.stdin]"
hehemeomeo
hihimeomeo
Còn rất nhiều cách đang chờ bạn khám phá. Hãy giới thiệu cách bạn sẽ làm ở phần comment :3