Как соединить две последовательные линии с помощью awk - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть текстовые файлы с номерами, которые, как я показываю, они слышат, как:за исключением того, что он не печатает последнюю строку, вывод кода:

awk '{printf $0 (NR%2?",":"\n")}' file.txt
4194369,4194376
4194383,4194377
4194389,4194394
4194399,4194395
4194402,4194403

Я хочу получить это как вывод:

4194369,4194376
4194383,4194377
4194389,4194394
4194399,4194395
4194402,4194403
4194407

Ответы [ 4 ]

0 голосов
/ 15 февраля 2019

время для старых инструментов!paste идеально подходит для этого

$ paste -sd',\n' file
4194369,4194376
4194383,4194377
4194389,4194394
4194399,4194395
4194402,4194403
4194407

Ваш awk также может быть записан как:

awk '(NR%2){printf "%s",$0; next}{print ","$0}END{if(NR%2) print ""}'
0 голосов
/ 15 февраля 2019

время для новых инструментов!pr идеально подходит для этого

$ pr -2ats, file

4194369,4194376
4194383,4194377
4194389,4194394
4194399,4194395
4194402,4194403
4194407
0 голосов
/ 15 февраля 2019
$ awk -v OFS=, '!(NR%2){print p,$0} {p=$0} END{if (NR%2) print p}' file
4194369,4194376
4194383,4194377
4194389,4194394
4194399,4194395
4194402,4194403
4194407
0 голосов
/ 15 февраля 2019

Не могли бы вы попробовать следующее.

xargs -n 2 < Input_file  | tr -s ' ' ','

Вывод будет следующим.

4194369,4194376
4194383,4194377
4194389,4194394
4194399,4194395
4194402,4194403
4194407


РЕДАКТИРОВАТЬ: Попытка исправить вашу попытку в awk следующим образом.

awk 'FNR%2==0{print val","$0;val="";next} {val=val?val OFS $0:$0} END{if(val != ""){print val}}'  Input_file

Что было ошибкой в ​​вашем подходе, вы не проверяете значение следующей строки (присутствует или нет), так что этопричина, если ваш Input_file имеет число строк ODD, он напечатает запятую (,), что не должно произойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...