如何用n过滤文件。在模式之后排成一行?

时间:2013-07-29 11:51:40

标签: command-line sed awk pattern-matching

我有一个带有不同线条的大文件。

我感兴趣的线条看起来很相似:

lcl|NC_005966.1_gene_59 scaffold441.6   99.74   390 1   0   1   390 34065   34454   0.0  715
lcl|NC_005966.1_gene_59 scaffold2333.4  89.23   390 42  0   1   390 3114    2725    1e-138   488
lcl|NC_005966.1_gene_60 scaffold441.6   100.00  186 0   0   1   186 34528   34713   1e-95    344

现在我想得到模式'lcl | NC_'之后的行,但只是第三个单词(或行中的第n个单词)小于100.

(在这种情况下前两行,因为他们只得到了99.74和89.23的数字)

接下来,他们应该保存到一个新文件中。

1 个答案:

答案 0 :(得分:3)

这可以做到:

$ awk '$1 ~ /^lcl\|NC_/ && $3<100' file
lcl|NC_005966.1_gene_59 scaffold441.6   99.74   390 1   0   1   390 34065   34454   0.0  715
lcl|NC_005966.1_gene_59 scaffold2333.4  89.23   390 42  0   1   390 3114    2725    1e-138   488

检查两件事:
  - 以lcl|NC_开头的第一个字段:$1 ~ /^lcl\|NC_/执行此操作。 (Thanks Ed Morton for improving之前的$1~"^lcl|NC_"
  - 第3个字段<100:$3<100

要保存到文件中,您可以执行以下操作:

awk '$1 ~ /^lcl\|NC_/ && $3<100' file > new_file
                                      ^^^^^^^^^^