perl - 如何在 awk 或 shell 中实现这个?

标签 perl shell join sed awk

输入文件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/

相关文章:

perl - 为 perl 安装 GD 模块 - 安装程序时出错

ruby - Ruby Shell 中的转义字符

bash - 在波浪号之前扩展变量

ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe?

MYSQL JOIN TWO TABLES (+ LIMIT based on the first table)

mysql - 比较一个表中某个字段的值与另一个表中多个字段的总和

mysql - 从文件中读取密码时使用 perl dbi 获取 "Access denied"

regex - 只有一个单独的插入符号的字符类有什么作用?

正则表达式和 o 运算符 perl v5.10.1

sql - 在 JOIN 的 ON 子句中使用别名