【发布时间】:2015-01-29 10:37:05
【问题描述】:
我正在尝试使用 awk 单行脚本对同一个文件进行多次替换。 用于变量赋值的文件如下:
> cat names
1 Dusky
2 Flag
3 Mon
我想在这个文件中进行替换:
> cat file.txt
1 1 0.6248 0.3752
2 2 0.0430 0.9570
3 3 0.0624 0.9376
我尝试过的是:
while read num name; do
awk -v J=$num -v R=$name '{if (match($1, J)) $2=R; print;}' file.txt;
done < names
但此代码会打印要替换的每一行的输入文件。
1 Dusky 0.6248 0.3752
2 2 0.0430 0.9570
3 3 0.0624 0.9376
1 1 0.6248 0.3752
2 Flag 0.0430 0.9570
3 3 0.0624 0.9376
1 1 0.6248 0.3752
2 2 0.0430 0.9570
3 Mon 0.0624 0.9376
我怎样才能让它只打印一次被替换的行? 可以在 awk 或 perl 中。
期望的输出:
1 Dusky 0.6248 0.3752
2 Flag 0.0430 0.9570
3 Mon 0.0624 0.9376
【问题讨论】:
-
所以您想将
file.txt中的第二列替换为names中的对应名称?列之间的分隔符是什么? -
没错。分隔符是空格,但它可以是多个空格分隔字段。