我想使用grep在包含425409行,文件大小为26.8 MB,UTF8编码的文件中选择不包含“ WAT”的行。
文件看起来像这样
>ATOM 1 N ALA 1 9.979 -15.619 28.204 1.00 0.00
>ATOM 2 H1 ALA 1 9.594 -15.053 28.938 1.00 0.00
>ATOM 3 H2 ALA 1 9.558 -15.358 27.323 1.00 0.00
>ATOM 12 O ALA 1 7.428 -16.246 28.335 1.00 0.00
>ATOM 13 N HID 2 7.563 -18.429 28.562 1.00 0.00
>ATOM 14 H HID 2 6.557 -18.369 28.638 1.00 0.00
>ATOM 15 CA HID 2 8.082 -19.800 28.535 1.00 0.00
>ATOM 24 HE1 HID 2 8.603 -23.670 33.041 1.00 0.00
>ATOM 25 NE2 HID 2 8.012 -23.749 30.962 1.00 0.00
>ATOM 29 O HID 2 5.854 -20.687 28.537 1.00 0.00
>ATOM 30 N GLN 3 7.209 -21.407 26.887 1.00 0.00
>ATOM 31 H GLN 3 8.168 -21.419 26.566 1.00 0.00
>ATOM 32 CA GLN 3 6.271 -22.274 26.157 1.00 0.00
**16443 lines**
>ATOM 16425 C116 PA 1089 -34.635 6.968 -0.185 1.00 0.00
>ATOM 16426 H16R PA 1089 -35.669 7.267 -0.368 1.00 0.00
>ATOM 16427 H16S PA 1089 -34.579 5.878 -0.218 1.00 0.00
>ATOM 16428 H16T PA 1089 -34.016 7.366 -0.990 1.00 0.00
>ATOM 16429 C115 PA 1089 -34.144 7.493 1.177 1.00 0.00
>ATOM 16430 H15R PA 1089 -33.101 7.198 1.305 1.00 0.00
>ATOM 16431 H15S PA 1089 -34.179 8.585 1.197 1.00 0.00
>ATOM 16432 C114 PA 1089 -34.971 6.910 2.342 1.00 0.00
>ATOM 16433 H14R PA 1089 -35.147 5.847 2.166 1.00 0.00
**132284 lines**
>ATOM 60981 O WAT 7952 -46.056 -5.515 -56.245 1.00 0.00
>ATOM 60982 H1 WAT 7952 -45.185 -5.238 -56.602 1.00 0.00
>ATOM 60983 H2 WAT 7952 -46.081 -6.445 -56.561 1.00 0.00
>TER
>ATOM 60984 O WAT 7953 -51.005 -3.205 -46.712 1.00 0.00
>ATOM 60985 H1 WAT 7953 -51.172 -3.159 -47.682 1.00 0.00
>ATOM 60986 H2 WAT 7953 -51.051 -4.177 -46.579 1.00 0.00
>TER
>ATOM 60987 O WAT 7954 -49.804 -0.759 -49.284 1.00 0.00
>ATOM 60988 H1 WAT 7954 -48.962 -0.677 -49.785 1.00 0.00
>ATOM 60989 H2 WAT 7954 -49.868 0.138 -48.903 1.00 0.00
**many lines until the end**
>TER
>END
我使用了grep -v 'WAT' file.txt
,但是它只返回了前16179行不包含“ WAT”的行,并且我看到还有更多行不包含“ WAT”。例如,以下行(以及许多其他行)不会出现在输出中:
> ATOM 16425 C116 PA 1089 -34.635 6.968 -0.185 1.00 0.00
为了弄清楚正在发生的事情,我尝试了grep ' ' file.txt
。此命令应返回文件中的每一行,但也只返回前16179行。
我也尝试过使用tail -408977 file.txt | grep ' '
,它返回了所有由tail调用的行。然后,我尝试了tail -408978 file.txt | grep ' '
,输出完全为空,零行。
我正在研究“正常”的64位系统Kubuntu。
非常感谢您的帮助!
答案 0 :(得分:2)
当我尝试时会得到
$: grep WAT file.txt
Binary file file.txt matches
grep假定它是一个二进制文件。添加-a
-a,--text等效于--binary-files = text
$: grep -a WAT file.txt|head -3
ATOM 29305 O WAT 4060 -75.787 -79.125 25.925 1.00 0.00 O
ATOM 29306 H1 WAT 4060 -76.191 -78.230 25.936 1.00 0.00 H
ATOM 29307 H2 WAT 4060 -76.556 -79.670 25.684 1.00 0.00 H
您的文件在第16426、16428、16430和16432行的末尾各有2个NULL。
$: tr "\0" @ <file.txt|grep -n @
16426:ATOM 16421 KA CAL 1085 -20.614 -22.960 18.641 1.00 0.00 @@
16428:ATOM 16422 KA CAL 1086 20.249 21.546 19.443 1.00 0.00 @@
16430:ATOM 16423 KA CAL 1087 22.695 -19.700 19.624 1.00 0.00 @@
16432:ATOM 16424 KA CAL 1088 -22.147 19.317 17.966 1.00 0.00 @@