多くの行を含むファイルがありますが、列間の元のタブ/間隔を失うことなくX
、最初の4635行の5番目の列の文字列を別の文字列に変更したいと考えてA
います。
私は変更したいと思っています(特定の範囲の行について)
ATOM 2732 HN SER X 176 181.410 174.270 311.410 0.00 0.00
ATOM 2733 CA SER X 176 180.170 172.920 310.330 0.00 0.00
ATOM 2734 HA SER X 176 179.860 171.950 310.720 0.00 0.00
ATOM 2735 CB SER X 176 179.010 173.910 310.790 0.00 0.00
ATOM 2736 HB1 SER X 176 178.020 173.710 310.340 0.00 0.00
ATOM 2737 HB2 SER X 176 178.910 173.930 311.900 0.00 0.00
に
ATOM 2732 HN SER A 176 181.410 174.270 311.410 0.00 0.00
ATOM 2733 CA SER A 176 180.170 172.920 310.330 0.00 0.00
ATOM 2734 HA SER A 176 179.860 171.950 310.720 0.00 0.00
ATOM 2735 CB SER A 176 179.010 173.910 310.790 0.00 0.00
ATOM 2736 HB1 SER A 176 178.020 173.710 310.340 0.00 0.00
ATOM 2737 HB2 SER A 176 178.910 173.930 311.900 0.00 0.00
私は次のコードを思いついた、
awk '{if (NR>=1&&NR<=4635) split($0, a, FS, seps); a[5]="A"; for (i=1;i<=NF;i++) printf("%s%s", a[i], seps[i]); print ""}' dat > tmp
しかし、ファイル内のすべての行がA
1〜4635行ではなく、5番目の列にあるようです。どんな提案でも大歓迎です!
中括弧/中括弧とelse
分岐を追加します。
awk '{if (NR>=1&&NR<=4635) {split($0, a, FS, seps); a[5]="A"; for (i=1;i<=NF;i++) printf("%s%s", a[i], seps[i]); print ""} else {print}}' dat > tmp
中括弧/中括弧がif
ない場合、本体にはsplit
コマンドのみが含まれます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加