2017-08-03 15 views
0

我必須進行後處理一些txt文件包括與該模式的一些重複的字符串「TER」如刪除通過模式重複行的bash

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 

使用bash命令,如sedgrepawk我將是任何解決方案的感謝。

回答

0

前行的跟蹤,不打印線時,它的TER,如果前一個也是「TER」:

awk '!/^TER$/ || prev != "TER" { print } { prev = $0 }' file 

可以跳過明確{ print }塊太大,因爲這是在默認操作:

awk '!/^TER$/ || prev != "TER"; { prev = $0 }' file 
3

請與

uniq -d 

我f只有TER行重複,然後

uniq 

刪除重複的TER行。

0

這裏是另一個AWK版本:

awk '/^TER/{ c++; if (c == 1){ print }}/^ATOM/{ print; c = 0 }' file 
2

SED溶液:

sed '$!N;/TER\nTER/!P;D;' file 
  • $!N - 每個下一行追加到PATTEN空間(分析每個對線)直到最後一行$

  • /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 
0
awk '!/^TER/{c=1}c; /^TER/{c=0}' file 

設置c作爲標誌確定是否打印。

  • 在非「TER」情況下,設置標誌並打印。
  • 如果遇到第一個「TER」,由於c仍然打開,所以會打印該行,然後將其設置爲c
  • 由於c不斷打印,因此不會打印連續的「TER」。
1

嘗試SED:

sed '/^TER/{N;/\nTER\s*$/D}' urfile 
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