我有两个','
个分隔文件,如下所示:
文件1:
A,inf
B,inf
C,0.135802
D,72.6111
E,42.1613
file2的:
A,inf
B,inf
C,0.313559
D,189.5
E,38.6735
我想比较2个文件,并根据第1列获取公共行。因此,对于上述文件,输出将如下所示:
A,inf,inf
B,inf,inf
C,0.135802,0.313559
D,72.6111,189.5
E,42.1613,38.6735
我试图在awk
中尝试这样做并尝试过:
awk ' NR == FNR {val[$1]=$2; next} $1 in val {print $1, val[$1], $2}' file1 file2
此代码返回此结果:
A,inf
B,inf
C,0.135802
D,72.6111
E,42.1613
这不是我想要的。你知道如何改进它吗?
答案 0 :(得分:1)
$ awk 'BEGIN{FS=OFS=","}NR==FNR{a[$1]=$0;next}$1 in a{print a[$1],$2}' file1 file2
A,inf,inf
B,inf,inf
C,0.135802,0.313559
D,72.6111,189.5
E,42.1613,38.6735
说明:
$ awk '
BEGIN {FS=OFS="," } # set separators
NR==FNR { # first file
a[$1]=$0 # hash to a, $1 as index
next # next record
}
$1 in a { # second file, if $1 in a
print a[$1],$2 # print indexed record from a with $2
}' file1 file2
答案 1 :(得分:1)
您的awk
代码基本上有效,您只是错过告诉awk
使用,
作为字段分隔符。您可以通过将BEGIN{FS=OFS=","}
添加到脚本的开头来完成此操作。
但是,如同问题中的示例中那样对文件进行排序,您只需使用join
命令:
join -t, file1 file2
这将根据第一列加入文件。 -t,
告诉联接,列以逗号分隔。
如果文件未排序,您可以像这样对它们进行排序:
join -t, <(sort file1) <(sort file2)