我必须对一些包含一些重复字符串的txt文件进行后处理,其格式为" TER" e.g
ATOM 47047 H1 WAT 11303 -32.626 -35.728 -30.283 1.00 0.00
ATOM 47048 H2 WAT 11303 -33.975 -35.757 -30.969 1.00 0.00
TER
TER
TER
TER
TER
ATOM 47052 O WAT 11305 -38.279 -35.930 -33.162 1.00 0.00
ATOM 47053 H1 WAT 11305 -37.860 -35.087 -33.334 1.00 0.00
ATOM 47054 H2 WAT 11305 -39.198 -35.793 -33.391 1.00 0.00
TER
TER
ATOM 47055 O WAT 11306 -35.943 -38.199 -31.778 1.00 0.00
ATOM 47056 H1 WAT 11306 -35.823 -38.794 -31.039 1.00 0.00
ATOM 47057 H2 WAT 11306 -35.083 -38.162 -32.198 1.00 0.00
TER
ATOM 47058 O WAT 11307 -33.604 -37.645 -33.202 1.00 0.00
ATOM 47059 H1 WAT 11307 -34.130 -37.121 -33.805 1.00 0.00
ATOM 47060 H2 WAT 11307 -33.261 -37.012 -32.571 1.00 0.00
TER
TER
TER
ATOM 47061 O WAT 11308 -40.428 -29.625 -32.046 1.00 0.00
ATOM 47062 H1 WAT 11308 -40.966 -28.900 -32.365 1.00 0.00
ATOM 47063 H2 WAT 11308 -40.175 -30.102 -32.837 1.00 0.00
TER
在这个日志中,我想删除所有重复多次TER字符串,只保留带有TER的第一个字符串。 E.g
ATOM 47047 H1 WAT 11303 -32.626 -35.728 -30.283 1.00 0.00
ATOM 47048 H2 WAT 11303 -33.975 -35.757 -30.969 1.00 0.00
TER
ATOM 47052 O WAT 11305 -38.279 -35.930 -33.162 1.00 0.00
ATOM 47053 H1 WAT 11305 -37.860 -35.087 -33.334 1.00 0.00
ATOM 47054 H2 WAT 11305 -39.198 -35.793 -33.391 1.00 0.00
TER
ATOM 47055 O WAT 11306 -35.943 -38.199 -31.778 1.00 0.00
ATOM 47056 H1 WAT 11306 -35.823 -38.794 -31.039 1.00 0.00
ATOM 47057 H2 WAT 11306 -35.083 -38.162 -32.198 1.00 0.00
TER
ATOM 47058 O WAT 11307 -33.604 -37.645 -33.202 1.00 0.00
ATOM 47059 H1 WAT 11307 -34.130 -37.121 -33.805 1.00 0.00
ATOM 47060 H2 WAT 11307 -33.261 -37.012 -32.571 1.00 0.00
TER
ATOM 47061 O WAT 11308 -40.428 -29.625 -32.046 1.00 0.00
ATOM 47062 H1 WAT 11308 -40.966 -28.900 -32.365 1.00 0.00
ATOM 47063 H2 WAT 11308 -40.175 -30.102 -32.837 1.00 0.00
TER
对于使用b sed
,grep
或awk
等bash命令的解决方案,我将不胜感激。
答案 0 :(得分:3)
检查
uniq -d
如果只有TER行重复,那么
uniq
删除重复的TER行。
答案 1 :(得分:2)
短 sed 解决方案:
sed '$!N;/TER\nTER/!P;D;' file
$!N
- 将每一行下一行附加到图案空间(分析每对线),直到最后一行$
/TER\nTER/!P;D;
- 如果图片空间不包含相同的TER
值,则仅打印图案空间的第一行
输出:
ATOM 47047 H1 WAT 11303 -32.626 -35.728 -30.283 1.00 0.00
ATOM 47048 H2 WAT 11303 -33.975 -35.757 -30.969 1.00 0.00
TER
ATOM 47052 O WAT 11305 -38.279 -35.930 -33.162 1.00 0.00
ATOM 47053 H1 WAT 11305 -37.860 -35.087 -33.334 1.00 0.00
ATOM 47054 H2 WAT 11305 -39.198 -35.793 -33.391 1.00 0.00
TER
ATOM 47055 O WAT 11306 -35.943 -38.199 -31.778 1.00 0.00
ATOM 47056 H1 WAT 11306 -35.823 -38.794 -31.039 1.00 0.00
ATOM 47057 H2 WAT 11306 -35.083 -38.162 -32.198 1.00 0.00
TER
ATOM 47058 O WAT 11307 -33.604 -37.645 -33.202 1.00 0.00
ATOM 47059 H1 WAT 11307 -34.130 -37.121 -33.805 1.00 0.00
ATOM 47060 H2 WAT 11307 -33.261 -37.012 -32.571 1.00 0.00
TER
ATOM 47061 O WAT 11308 -40.428 -29.625 -32.046 1.00 0.00
ATOM 47062 H1 WAT 11308 -40.966 -28.900 -32.365 1.00 0.00
ATOM 47063 H2 WAT 11308 -40.175 -30.102 -32.837 1.00 0.00
TER
答案 2 :(得分:1)
尝试sed:
sed '/^TER/{N;/\nTER\s*$/D}' urfile
答案 3 :(得分:0)
跟踪前一行,如果前一行是“{”,则不打印TER
行:
awk '!/^TER$/ || prev != "TER" { print } { prev = $0 }' file
您也可以跳过显式{ print }
块,因为这是默认操作:
awk '!/^TER$/ || prev != "TER"; { prev = $0 }' file
答案 4 :(得分:0)
这是另一个awk版本:
awk '/^TER/{ c++; if ( c == 1 ){ print }}/^ATOM/{ print; c = 0 }' file
答案 5 :(得分:0)
awk '!/^TER/{c=1}c; /^TER/{c=0}' file
将c
设置为标志以确定是否打印。
c
仍处于启用状态,它会打印该行,然后将c
设置为。{/ li>
c
停留以来,不会打印连续的“TER”。答案 6 :(得分:0)
$ awk '$1=="TER" && p=="TER"{next} {print; p=$1}' file
ATOM 47047 H1 WAT 11303 -32.626 -35.728 -30.283 1.00 0.00
ATOM 47048 H2 WAT 11303 -33.975 -35.757 -30.969 1.00 0.00
TER
ATOM 47052 O WAT 11305 -38.279 -35.930 -33.162 1.00 0.00
ATOM 47053 H1 WAT 11305 -37.860 -35.087 -33.334 1.00 0.00
ATOM 47054 H2 WAT 11305 -39.198 -35.793 -33.391 1.00 0.00
TER
ATOM 47055 O WAT 11306 -35.943 -38.199 -31.778 1.00 0.00
ATOM 47056 H1 WAT 11306 -35.823 -38.794 -31.039 1.00 0.00
ATOM 47057 H2 WAT 11306 -35.083 -38.162 -32.198 1.00 0.00
TER
ATOM 47058 O WAT 11307 -33.604 -37.645 -33.202 1.00 0.00
ATOM 47059 H1 WAT 11307 -34.130 -37.121 -33.805 1.00 0.00
ATOM 47060 H2 WAT 11307 -33.261 -37.012 -32.571 1.00 0.00
TER
ATOM 47061 O WAT 11308 -40.428 -29.625 -32.046 1.00 0.00
ATOM 47062 H1 WAT 11308 -40.966 -28.900 -32.365 1.00 0.00
ATOM 47063 H2 WAT 11308 -40.175 -30.102 -32.837 1.00 0.00
TER