我有一個很長的文本文件,其中有一個靠近結尾的地方有一行,第三列== OXT。通過AWK在txt中基於模式的替換
ATOM 2439 O LEU 300 -4.699 34.599 65.335 1.00 83.23 O
ATOM 2440 N LEU 301 -6.822 33.898 65.057 1.00 19.70 N
ATOM 2441 CA LEU 301 -7.080 34.965 64.138 1.00 19.70 C
ATOM 2442 CB LEU 301 -8.165 34.630 63.101 1.00 19.70 C
ATOM 2443 CG LEU 301 -7.762 33.478 62.162 1.00 19.70 C
ATOM 2444 CD1 LEU 301 -8.849 33.207 61.110 1.00 19.70 C
ATOM 2445 CD2 LEU 301 -6.376 33.719 61.543 1.00 19.70 C
ATOM 2446 C LEU 301 -7.556 36.168 64.946 1.00 19.70 C
ATOM 2447 O LEU 301 -8.657 36.695 64.633 1.00 19.70 O
ATOM 2448 OXT LEU 301 -6.821 36.580 65.884 1.00 19.70 O
TER 2449 LEU 301
HETATM 2450 NA NA 302 -13.016 13.036 54.214 1.00 44.33 NA
HETATM 2451 O WAT 303 -18.411 13.587 59.094 1.00 27.41 O
HETATM 2452 O WAT 304 -11.894 17.279 58.575 1.00 18.35 O
HETATM 2453 O WAT 305 -15.811 12.728 54.157 1.00 39.81 O
我需要修改與圖案OXT這條線(見下例)在以下的方式:在第三塔 - 替代「OXT」與「N」;在第四欄 - 用NHE替代ACE;
ATOM 2439 O LEU 300 -4.699 34.599 65.335 1.00 83.23 O
ATOM 2440 N LEU 301 -6.822 33.898 65.057 1.00 19.70 N
ATOM 2441 CA LEU 301 -7.080 34.965 64.138 1.00 19.70 C
ATOM 2442 CB LEU 301 -8.165 34.630 63.101 1.00 19.70 C
ATOM 2443 CG LEU 301 -7.762 33.478 62.162 1.00 19.70 C
ATOM 2444 CD1 LEU 301 -8.849 33.207 61.110 1.00 19.70 C
ATOM 2445 CD2 LEU 301 -6.376 33.719 61.543 1.00 19.70 C
ATOM 2446 C LEU 301 -7.556 36.168 64.946 1.00 19.70 C
ATOM 2447 O LEU 301 -8.657 36.695 64.633 1.00 19.70 O
ATOM 2448 N NHE 301 -6.821 36.580 65.884 1.00 19.70 N
TER
HETATM 2450 NA NA 302 -13.016 13.036 54.214 1.00 44.33 NA
HETATM 2451 O WAT 303 -18.411 13.587 59.094 1.00 27.41 O
HETATM 2452 O WAT 304 -11.894 17.279 58.575 1.00 18.35 O
HETATM 2453 O WAT 305 -15.811 12.728 54.157 1.00 39.81 O
我曾嘗試使用
awk '$3=="OXT"{ f=1; rn=NR; $3=$NF="N"; $4="NHE" }/TER/ && f && NR-rn == 1{ $0=$1 }1' file
:與N的最後一列替代O I需要各支柱之間保持相等的空間數字作爲文件的其餘部分換人後重要
它已經產生了一個正確的工作,但在一個新的字符串現在我有每個列之間有1個空格是錯誤的格式。
ATOM 2410 N NHE 299 -17.563 -15.711 -15.915 1.00 76.42 N
但是我需要保持列之間的間距的原始格式作爲文件的其餘部分:
ATOM 2448 N NHE 301 -6.821 36.580 65.884 1.00 19.70 N
相同的重複的故事https://stackoverflow.com/questions/45487293/substitution-of-the-columns-found-in-pattern-via-bash – RomanPerekhrest
它在替代字符串中產生正確的東西,但摧毀一些部分其餘文件:移動最後兩列,從而產生人工製品。 –
@ m47730關於編輯:沒有理由不能用其他shell解決這個問題。限制只有'bash'的答案是不必要的限制。 – jpaugh