嗨我有一个AWK命令,它将两个文件组合在一起。
awk -v OFS='\t' '
NR==1 { print $0, "Column4", "Column5"; next }
NR==FNR { a[$1]=$0; next}
$1 in a { print a[$1], $2, $3 }
' $1 $2 > $3
这只返回每个文件中的一个键。 例如,如下所示,
档案1
Key Column1 Column2 Column3
Test1 500 400 200
Test1 499 400 200
Test1 499 399 200
Test1 498 100 100
Test2 600 200 150
Test2 600 199 150
Test2 599 199 100
文件2
Test1 Good Good
Test2 Good Good
然后结果将是
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test2 600 200 150 Good Good
但我想让所有行合并如下。
Key Column1 Column2 Column3 Column4 Column5
Test1 500 400 200 Good Good
Test1 499 400 200 Good Good
Test1 499 399 200 Good Good
Test1 498 100 100 Good Good
Test2 600 200 150 Good Good
Test2 600 199 150 Good Good
Test2 599 199 100 Good Good
任何人都只想使用AWK改变逻辑。 谢谢!C
答案 0 :(得分:2)
我认为你正在寻找
join file1 file2
如果你坚持用awk做这件事,一个好办法就是以相反的方式处理文件,这样你就可以在处理主文件时准备好要添加的部分:
awk -v OFS='\t' '
FNR == NR { a[$1] = $2 OFS $3; next }
{ $1 = $1 }
FNR == 1 { print $0, "Column4", "Column5" }
FNR != 1 { print $0, a[$1] }
' "$2" "$1" > "$3"
编辑:@EtanReisner建议添加{ $1 = $1 }
。这样做的目的是强制awk从字段重建行,以便由空格混合分割的输入数据由OFS
统一分隔(在本例中为制表符)。如果数据已经以制表符分隔,则没有必要(但不会受到伤害)。