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
我有一个要在 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