我有以下问题。我有几千行(大约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它应该引用一个单独的文件,其中包含我需要的所有唯一标识符?可能最后一个想法是最优雅的方式,但我不知道是否可能。
先谢谢你的帮助。
最佳, 托比
答案 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正则表达式。我不认为你需要这种并发症,但当然可以。