Соединяйте линии на основе шаблона - PullRequest
3 голосов
/ 16 ноября 2011

У меня есть следующий файл:

test
1
My
2
Hi
3

мне нужен способ использовать cat, grep или awk, чтобы получить следующий вывод:

test1
My2
Hi3

Как мне добиться этого одной командой? что-то вроде

cat file.txt | grep ... | awk ...

Обратите внимание, что в исходном текстовом файле всегда указывается строка, за которой следует число.

Ответы [ 5 ]

7 голосов
/ 16 ноября 2011

sed 'N;s/\n//' file.txt

Это должно дать желаемый вывод, когда содержимое находится в file.txt

3 голосов
/ 16 ноября 2011
paste -d "" - - < filename

Это берет последовательные строки и вставляет их вместе, разделенные пустой строкой.

2 голосов
/ 16 ноября 2011
awk '{printf("%s", $0);} !(NR%2){printf("\n");}' file.txt

РЕДАКТИРОВАТЬ : Я только что заметил, что ваш вопрос требует использования cat и grep.Обе эти программы не нужны для достижения ваших заявленных целей.Если у вас есть причины для включения их, которые вы не упомянули, попробуйте эту (бесполезно неэффективную) версию строки, которую я написал выше:

cat file.txt | grep '^' | awk '{printf("%s", $0);} !(NR%2){printf("\n");}'

Возможно, эта команда использует функции, отсутствующие воригинальная awk программа.Вам может потребоваться вызвать новую программу awk, вместо этого nawk.

0 голосов
/ 17 ноября 2011

Вот ответ: cat file.txt | awk 'BEGIN { lno = 0 } { val=$0; if (lno % 2 == 1) {printf "%s\n", $0} else {printf "%s", $0}; ++lno}'

0 голосов
/ 16 ноября 2011

Если ваш входной файл всегда 1 число, а затем 1 строка, и вам нужны только строки, все, что вам нужно сделать, это взять каждую вторую строку.

Если вы хотите только нечетные строки, вы можете сделатьawk 'NR % 2' file.txt

Если вам нужны вечера, это становится awk 'NR % 2==0' data

...