grep

grep

我有一个包含超过 7500 万条记录的大型文本文件。每条记录由字符串标记(属性)组成,每个标记之间都有一个制表符。这是两条记录的示例:

43    ao489fer809    abcdefghikl    1.41    0

81    ijfij03iuff    abcdefghikl e89rt904i3 094utofgimf    0.13    1

因此每个记录由 5 个标记组成(请注意,第三个标记包含空格字符)。

现在假设我有字符串“abcdefghikl”——我们称之为密钥——。我对第三个标记感兴趣。所以我想将密钥与第三个标记进行比较,如果该标记是确切地密钥(而不仅仅是包含密钥作为我的第二条记录),将获胜记录写入新文件。有什么 grep 想法吗?

答案1

awk在这种情况下我会用

awk -F"\t" '$3 == "abcdefghikl" {print}' filename > outputfile

将分隔符设置为制表符,并仅打印第三列与键匹配的行。

答案2

grep

$ cat -v td
43      ao489fer809     abcdefghikl     1.41    0
81      ijfij03iuff     abcdefghikl e89rt904i3 094utofgimf      0.13    1

$ grep -P '\tabcdefghikl\t' td
43      ao489fer809     abcdefghikl     1.41    0

或者如果挑剔

$ grep -P '^[^\t]*\t[^\t]*\tabcdefghikl\t' td
43      ao489fer809     abcdefghikl     1.41    0

相关内容