Конкатенация линий в Баш - PullRequest
       3

Конкатенация линий в Баш

9 голосов
/ 22 октября 2010

Большинство программ командной строки работают только по одной строке за раз.

Могу ли я использовать общую утилиту командной строки (echo, sed, awk и т. Д.) Для объединения каждого набора из двух строк, или мне нужно написать скрипт / программу с нуля, чтобы сделать это?

$ cat myFile
line 1
line 2
line 3
line 4

$ cat myFile | __somecommand__
line 1line 2
line 3line 4

Ответы [ 5 ]

11 голосов
/ 22 октября 2010
sed 'N;s/\n/ /;'

Возьмите следующую строку и замените символ новой строки пробелом.

seq 1 6 | sed 'N;s/\n/ /;'
1 2
3 4
5 6
8 голосов
/ 22 октября 2010
$ awk 'ORS=(NR%2)?" ":"\n"' file
line 1 line 2
line 3 line 4

$ paste - -  < file
line 1  line 2
line 3  line 4
1 голос
/ 22 октября 2010

Вот версия сценария оболочки, для которой не нужно переключать флаг:

while read line1; do read line2; echo $line1$line2; done < inputfile
1 голос
/ 22 октября 2010

Вы также можете использовать Perl как:

$ perl -pe 'chomp;$i++;unless($i%2){$_.="\n"};' < file
line 1line 2
line 3line 4
1 голос
/ 22 октября 2010

Не определенная команда, но этот фрагмент оболочки должен помочь:

cat myFile | while read line; do echo -n $line; [ "${i}" ] && echo && i= || i=1 ; done
...