awk拆分字段并将拆分放在文件末尾

awk拆分字段并将拆分放在文件末尾,awk,Awk,尝试使用awk在-上拆分$1,并打印文件最后一列中的第四个值,中间有一个空选项卡。下面的命令确实执行,但只是按原样打印文件。谢谢:) 文件制表符分隔 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 Header1 Head

尝试使用
awk
-
上拆分
$1
,并打印
文件
最后一列中的第四个值,中间有一个空选项卡。下面的命令确实执行,但只是按原样打印
文件
。谢谢:)

文件
制表符分隔

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
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
所需
制表符分隔

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
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

您可以使用
-
作为输入字段分隔符:

awk -F'-' 'NR==1{print; next} {print $0"\t"$4}' file
打印未修改的第一行,否则打印该行、制表符和第四个字段。

使用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头2头3长头4头5头6 00-0000-12345-xxx-yy_0/path/to/file aaaaaaa 1111 xxx 00-0008-67899-yyy-zz_8/path/to/file AAAA 1111 yyy
其他答案很好,也没什么大不了的,但这里有一个调整,因此您不需要两个单独的
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

记录中的列数
$NF
基于当前行,而不是标题。此外,赋值类似于
=
,因此您的
a[4]=$NF
是向后的,如果这是固定的,它将覆盖您的
1111
。相反,我认为您的目标是
awk'BEGIN{OFS=FS=“\t”}NR==1;NR>1{split($1,a,“-”);print$0,a[4]}'
。然而,@Freddy在下面的回答是一个更简单的方法来实现这一点。这在任何awk中都是可行的,GNU对此没有具体的说明。