将列从文件追加到另一个文件,awk



尝试使用awkfile中的$1附加到由tab分隔的out中的$2,同时将头行保留在out中。file中的最后一行在out中重复,我不确定为什么?谢谢:(。

文件

/path/to/00-0000-000-xx-yyy
/path/to/01-1212-1111-aa-bb

输出tab-delimited

Header1 Header2 Header3
1
2

电流tab-delimited

Header1 Header2 Header3 /path/to/00-0000-000-xx-yyy
1a1 /path/to/01-1212-1111-aa-bb
2a2 /path/to/01-1212-1111-aa-bb

所需tab-delimited

Header1 Header2 Header3
1   /path/to/00-0000-000-xx-yyy
2   /path/to/01-1212-1111-aa-bb

awk

awk '{getline l < "file"; print $0"t"l} ' FNR==1 out > tmp && mv tmp out
$ awk 'NR==FNR{a[NR]=$1; next} FNR>1{$0=$0 "t" a[FNR-1]} 1' file out
Header1 Header2 Header3
1       /path/to/00-0000-000-xx-yyy
2       /path/to/01-1212-1111-aa-bb

示例中file的最后一行在out中重复,因为当getline由于尝试读取2行文件的第3行而失败时,它不会为l分配任何内容,因此在打印时,l会保留getline成功的最后一个值。阅读http://awk.freeshell.org/AllAboutGetline如果您将来考虑再次使用getline,这很少是最好的方法,当您使用它时,您必须以一种非常具体的方式使用它,如文章中所述,以防止经常出现的神秘和无声的错误。

此外,永远不要将变量命名为l,因为它看起来太像数字1,因此会混淆代码。

请您尝试以下操作。

awk 'BEGIN{OFS="t"} FNR==NR{if(FNR==1){print;next}a[FNR-1]=$0;next} {print a[FNR],$0}' out file

或者,非一种线性形式的溶液如下:

awk '
BEGIN{
OFS="t"
}
FNR==NR{
if(FNR==1){
print
next
}
a[FNR-1]=$0
next
}
{
print a[FNR],$0
}' out file

输出如下。

Header1 Header2 Header3
1   /path/to/00-0000-000-xx-yyy
2   /path/to/01-1212-1111-aa-bb

相关内容

  • 没有找到相关文章

最新更新