使用bash在文件中查找特定行

时间:2015-02-02 08:28:29

标签: bash search awk lines

我有以下问题。我有几千行(大约1000列)的文件,我只需要一些特定的行。在这些文件的第二列中,有一个标识符,对于每一行都是唯一的。例如:

0 tg573754 0 3455 B H G J
0 tg238576 0 4568 K L E S
0 tg289476 0 3246 L E S D

让我们假设有数千行,我想从文件中提取出这3行。直到现在我用过:

awk '$2 == "tg573754"'
awk '$2 == "tg238576"'
awk '$2 == "tg289476"'

有没有办法在一行中组合多个搜索请求或告诉awk它应该引用一个单独的文件,其中包含我需要的所有唯一标识符?可能最后一个想法是最优雅的方式,但我不知道是否可能。

先谢谢你的帮助。

最佳, 托比

2 个答案:

答案 0 :(得分:2)

你可以使用正则表达式。

awk '$2 ~ /^(tg573754|tg238576|tg289476)$/' file

OR

awk '$2 ~ /^tg(573754|238576|289476)$/' fi;e

答案 1 :(得分:0)

我为此使用grep。特别是,我要查看grep -f,它允许您将字符串或正则表达式放入文件中。

我假设正则表达式看起来像这样:

^\S+\stg573754
^\S+\stg238576
^\S+\stg289476

所以"行的开头,一堆非空格,后跟一个空格,然后是你的模式"。调整以适合您的实际数据。

将其粘贴到文件"模式"并以grep -f patterns datafile运行。

根据你的系统的grep,它可能有-P选项,它为你提供Perl正则表达式。我不认为你需要这种并发症,但当然可以。