我有非常大的制表符分隔文件,我需要删除特定列中出现“TelePacific”字样的所有行。在这种情况下,TelePacifc在第4列中出现的所有行。这是一个示例输入文件:
7/18/13 10:06 0:00:09 TelePacific random person DEREK 9256408665 random company
7/18/13 10:07 0:00:21 TelePacific random person DEREK 9256408665 random company
7/18/13 10:10 0:19:21 TelePacific random person DEREK 9256408665 random company
7/18/13 10:39 0:01:07 random person 107
7/18/13 11:02 0:01:41 random person Gilbert 107 TelePacific
7/18/13 12:17 0:00:42 random person Gilbert 107 TelePacific
7/18/13 13:35 0:00:41 random person Gilbert 107 TelePacific
7/18/13 13:44 0:12:30 TelePacific ADKNOWLEDGE 8169311771 random company
7/18/13 14:46 0:19:48 TelePacific TOLL FREE CALL 8772933939 random company
7/15/13 10:09 0:01:27 random person Esquivel 272 TelePacific
7/15/13 10:16 0:00:55 random person Esquivel 272 TelePacific
7/15/13 10:59 0:00:51 random person Esquivel 272 TelePacific
7/15/13 11:01 0:01:09 random person Esquivel 272 TelePacific
答案 0 :(得分:5)
使用grep -v
:
grep -v "\bTelePacific\b" file > output && mv output file
或者使用awk:
awk '$4 != "TelePacific"' file > output && mv output file
答案 1 :(得分:1)
这应该可以解决问题:
$ sed '/TelePacific/d' file
如果您对输出感到满意,请使用-i
选项将更改存储回文件。
$ sed -i '/TelePacific/d' file
修改强>
仅返回第四列中TelePacific
的结果:
$ awk '$4=="TelePacific"' file
或反过来:
$ awk '$4!="TelePacific"' file
答案 2 :(得分:1)
fgrep -v
会这样做。
fgrep
相当于grep -F
,并阻止grep
将模式中的特殊字符解释为正则表达式控制字符。 -v
参数导致fgrep
输出不匹配模式的所有行,与输出行(默认值)相反。
fgrep -v TelePacific inputfile.tsv > outputfile.tsv
如上所述 anubhava ,您可以选择grep -v "\bTelePacific\b"
,以确保您不会意外地匹配“TelePacificFoo”或“FooTelePacific”。
答案 3 :(得分:0)
这是sed的解决方案
#!/bin/bash
sed '/TelePacific/d' your_file.txt > file_without_telepacific.txt
答案 4 :(得分:0)
试试这个:
grep -v TelePacific in-file > out-file
-v
选项会反转搜索,因此grep会打印与搜索模式不匹配的所有行。
如果in-file
和out-file
相同,则无效。要实现您必须使用这样的临时文件:
grep -v TelePacific in-file > in-file.tmp && mv in-file.tmp in-file