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 位数的任何其他数字。

我知道它可以用于搜索带有单词网格的行,并用 last / 分割并管道来自其他文件的数据,但我无法制定 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 回答