输入文件1:
5 5 NA
NA NA 1
2 NA 2
输入文件2:
1 1 1
2 NA 2
3 NA NA
NA 4 4
5 5 5
NA NA 6
输出:
3 NA NA
NA 4 4
NA NA 6
目的是:在 file1 中,将每一行中不 NA
的任意项设置为一个集合,然后在 file2 中,消除字段在该集合内的行。有人对此有什么想法吗?
最佳答案
要添加任何非“NA”的项目:
awk -f script.awk file1 file2
script.awk 的内容:
FNR==NR {
for (i=1;i<=NF;i++) {
if ($i != "NA") {
a[$i]++
}
}
next
}
{
for (j=1;j<=NF;j++) {
if ($j in a) {
next
}
}
}1
结果:
3 NA NA
NA 4 4
NA NA 6
或者,这是一句:
awk 'FNR==NR { for (i=1;i<=NF;i++) if ($i != "NA") a[$i]++; next } { for (j=1;j<=NF;j++) if ($j in a) next }1' file1 file2
关于perl - 如何在 awk 或 shell 中实现这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091201/