こんにちは、一連の数字を含むファイルがありますが、2番目のファイルの最初の列にその数字が表示されるたびに行を編集したいと思います。
a.inp
; atom type fx fy fz
1 1 1000 1000 1000
5 1 1000 1000 1000
7 1 1000 1000 1000
11 1 1000 1000 1000
12 1 1000 1000 1000
13 1 1000 1000 1000
15 1 1000 1000 1000
17 1 1000 1000 1000
20 1 1000 1000 1000
...
b.inp
5
15
29
48
72
87
...
出力
; atom type fx fy fz
1 1 1000 1000 1000
5 1 100000 100000 100000
7 1 1000 1000 1000
11 1 1000 1000 1000
12 1 1000 1000 1000
13 1 1000 1000 1000
15 1 100000 100000 100000
17 1 1000 1000 1000
20 1 1000 1000 1000
...
私のコードは何らかの理由で動作しませんか?
awk 'NR == FNR { lines[$1]; next }
$1 in lines { for (col = 3; col <= NF; ++col) $col *= 100 } 1' b.inp a.inp > new.inp
答え1
b.inp
DOSテキストファイルに変換するだけで、あなたが見るものを再現できます。
Windowsテキストエディタを使用してこれらのファイルを編集した場合、またはWindowsシステムで作成した場合は、DOSテキストファイルである可能性が高くなります。
このユーティリティを使用してUnixテキストファイルに変換しますdos2unix
。
DOSテキストファイルの場合、b.inp
コードには最初のブロック値行の末尾にキャリッジリターン文字が含まれますawk
。これらのキャリッジリターンは、後で(where from)が決して真にならないようにします$1
。$1 in lines
$1
a.inp
ファイルをUnixテキストファイルに変換すると、コードが生成されます。
; atom type fx fy fz
1 1 1000 1000 1000
5 1 100000 100000 100000
7 1 1000 1000 1000
11 1 1000 1000 1000
12 1 1000 1000 1000
13 1 1000 1000 1000
15 1 100000 100000 100000
17 1 1000 1000 1000
20 1 1000 1000 1000