0

私のテキストファイルには、次の行があります。

input.k

もっている

2684717    -194.7050476      64.2345581     150.6500092       0       0
2684718    -213.1575623      62.7032242     150.6500092       0       0
*INCLUDE
$# filename
./meshes/exportneu/147.k
*END

mesh.k   

もっている

100

input.k の 147.k を、mesh.k の 100 である別のファイルから別の数値に置き換えたい

必要な出力

2684717    -194.7050476      64.2345581     150.6500092       0       0
2684718    -213.1575623      62.7032242     150.6500092       0       0
*INCLUDE
$# filename
../meshes/exportneu/100.k
*END

使った

sed '/\<meshes\>/!d;=;s/.* ([^ ]\+).*/\1/;R mesh.k' input.k | 
sed 'N;N;s|\n|s/|;s|\n|/|;s|$|/|;q'  >temp.sed       
sed -i -f temp.sed input.k

ポイントは、この 147.k を 100.k に置き換えたいということです。100 は別のファイル mesh.k に書き込まれます。他のファイルには 100 しか存在しないか、3 桁の数字である可能性があります。

たとえば、単語メッシュで行を検索し、最後の / で分割し、他のファイルからデータをパイプすることで機能することはわかっていますが、sed または awk を作成することはできません。

よろしく

4

1 に答える 1

0

このようなものを試すことができます。

awk 'NR==FNR{a[++i]=$1; next} {{sub(/[0-9]+/,a[++j]); print}}' f2 f1

ただし、別のファイルからの置換は、置換が必要な入力行と同じ順序にする必要があることに注意してください -

$ cat f1
../meshes/exportneu/147.k
../secondline/exportneu/10.k

$ cat f2
100
40

$ awk 'NR==FNR{a[++i]=$1; next} {{sub(/[0-9]+/,a[++j]); print}}' f2 f1
../meshes/exportneu/100.k
../secondline/exportneu/40.k

awkファイルごとに内部の置換を改善できます。これは、あなたを正しい方向に導くためのものです。

于 2012-06-06T17:36:30.810 に答える