尝试使用awk
将file
中的$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