使用 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 正则表达式。我认为您不需要这种复杂功能,但您当然可能需要。
我有以下问题。我有包含数千行(大约 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 正则表达式。我认为您不需要这种复杂功能,但您当然可能需要。