我有两个文件。第一行是标题行。
File1中
start end
234 789
678 780
125 457
534 988
文件2
start end abc efg hij klm nmo
234 789 NA NA 01 02 NA
678 780 01 NA NA NA NA
125 457 NA 01 01 NA 02
534 988 NA NA NA NA 02
现在我要比较这两个文件; File1的coloumn1和column2以及File2的Column1和Column2。如果它们匹配,我想用File2的column1和column2打印第三个文件,然后打印字段字符不等于'NA'的列标题,如下面的输出文件
start end
234 789 hij, klm
678 780 abc
125 457 efg, hij, nmo
534 988 nmo
我只知道比较线条;但不知道是否可以打印与“NA”模式不匹配的标题。
答案 0 :(得分:0)
您可以尝试awk -f a.awk file2 file1
,其中a.awk
是:
NR==FNR {
if (NR==1) {
split($0,b)
next
}
s="";
for (i=3; i<=NF; i++) {
if ($i!="NA") {
if (s)
s=s", " b[i]
else
s=b[i]
}
}
a[$1,$2]=s
next
}
FNR==1 {next}
($1,$2) in a {
print $1,$2,a[$1,$2]
}
输出:
234 789 hij, klm
678 780 abc
125 457 efg, hij, nmo
534 988 nmo
答案 1 :(得分:0)
这是使用awk
的一种方式。像:
awk -f ./script.awk File1 File2 > File3
script.awk
的内容:
NR==1 {
h=$0
next
}
FNR==NR {
a[$1,$2]
next
}
FNR==1 {
split($0, b)
print h
next
}
($1,$2) in a {
for (i=3;i<=NF;i++) {
c = ($i != "NA" ? b[i] : "")
if (c) {
r = (r ? r ", " : "") c
}
}
print $1, $2, r
r = c = ""
}
File3
的结果和内容:
start end
234 789 hij, klm
678 780 abc
125 457 efg, hij, nmo
534 988 nmo