我有一个包含超过 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