awk, чтобы разделить поле и поместить разделение в конец файла - PullRequest
0 голосов
/ 10 марта 2020

Попытка использовать awk для разделения $1 на - и печати 4-го значения в последнем столбце file с пустой вкладкой между ними. Ниже выполняется, но просто печатает file как есть. Спасибо :).

файл tab-delimited

Header1 Header2 Header3 Long Header4    Header5 Header6
00-0000-12345-xxx-yy_0  /path/to/file   aaaaa   1111
00-0008-67899-yyy-zz_8  /path/to/file   aaaaa   1111

желаемый tab-delimited

Header1 Header2 Header3 Long Header4    Header5 Header6
00-0000-12345-xxx-yy_0  /path/to/file   aaaaa   1111        xxx
00-0008-67899-yyy-zz_8  /path/to/file   aaaaa   1111        yyy

awk

awk 'NR > 1; {split($1,a,"-"); a[4]} {a[4]=$NF","a[4]}1' OFS="\t" file

Ответы [ 3 ]

4 голосов
/ 10 марта 2020

Вы можете использовать - в качестве разделителя поля ввода:

awk -F'-' 'NR==1{print; next} {print $0"\t"$4}' file

Печать первой строки без изменений и печать строки, символа табуляции и четвертого поля в противном случае.

2 голосов
/ 10 марта 2020

С GNU awk:

awk -F ' +|-' 'NR==1{print}; NR>1{print $0 "\t" $4}' file

Вывод:

Header1 Header2 Header3 Long Header4    Header5 Header6
00-0000-12345-xxx-yy_0  /path/to/file   aaaaa   1111    xxx
00-0008-67899-yyy-zz_8  /path/to/file   aaaaa   1111    yyy
1 голос
/ 11 марта 2020

Остальные ответы хороши, и это не так уж и страшно, но здесь есть твик, поэтому вам не нужно 2 отдельных print утверждения:

$ awk -F'-' '{print $0 (NR>1 ? "\t" $4 : "")}' file
Header1 Header2 Header3 Long Header4    Header5 Header6
00-0000-12345-xxx-yy_0  /path/to/file   aaaaa   1111    xxx
00-0008-67899-yyy-zz_8  /path/to/file   aaaaa   1111    yyy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...