Unix:子集数据 - 根据列中的(多个)值选择行

Unix: Subsetting data - Selecting rows based on (multiple) values in a column

我有一个要在 Unix 中过滤的 .tsv 文件。

我想 select 特定列中具有特定数值(例如 30700、10600 等)的行。

到目前为止,我已经在网上看到了一些示例,其中根据列中的一个特定值对行进行了 select 编辑。但是,在我的例子中,一个特定的列可以有大约 20-30 个可接受的值。在这种情况下,我该如何处理我的数据子集?

awk '{ if ( == 1 ||  == 2) print [=10=]; }'

会成功的;但是没有人会因为写了 40 个术语的 if 语句而得到晋升;所以你可能 想考虑:

BEGIN { a[1] = a[2] = 1; }
{ if (a[]) print [=11=]; }

作为模板。 改为查看 Ed 的解决方案。

awk 的优点;它是一种非常灵活的语言,可能有几十种不同的方法来处理它。 awk 的难处;它是一种非常灵活的语言,可能有几十种不同的方法来处理这个问题。

正确的做法是:

BEGIN {
    split("30700 10600",tmp)
    for (i in tmp) {
        vals[tmp[i]]
    }
    FS = "\t"
}
 in vals