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

Find specific lines in a file with bash

我有以下问题。我有包含数千行(大约 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 ' == "tg573754"'
awk ' == "tg238576"'
awk ' == "tg289476"'

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

在此先感谢您对我的帮助。

最好的, 托比

你可以使用正则表达式。

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

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

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

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

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

所以"the beginning of the line, a bunch of non-spaces, followed by a space, followed by your pattern"。调整以适合您的实际数据。

将其粘贴到文件 "patterns" 和 运行 中作为 grep -f patterns datafile

根据您系统的 grep,它可能有 -P 选项,它为您提供 Perl 正则表达式。我认为您不需要这种复杂功能,但您当然可能需要。