我有一个文本文件,其中包含以下行;
100 200 300
50 120 200
60 500 340
我正在编写一个脚本来根据用户输入更改任何字段的值。如果用户在bash中给出no($ colno)列和行号($ rowno),我使用以下代码来确定要替换的确切字段。
awk -v i=$colno -v j=$rowno 'NR ==j {print $i}' file
因此,如果用户将$ colno设为1,将$ rownno设为3,则可以在第3行(60)中找到$ 1字段。
现在我想用其他一些用户给定的值($ new_val)永久地替换这个值(60)。
如何使用sed或awk执行此操作?这段代码将允许我使用用户指定的新值更改用户指定的任何字段。代码不应更改任何其他字段,即使具有相同的值。
请帮帮我。提前感谢你。
答案 0 :(得分:6)
只需用所需的值替换该列,
colno=1
rowno=3
awk -v i=$colno -v j=$rowno -v newvalue=20 'NR ==j {$i=newvalue}1' file
100 200 300
50 120 200
20 500 340
部分{$i=newvalue}1
设置$1
的值,即从当前示例第3行和第1列设置为newvalue
中设置的值。 {}1
根据个人重新定位重建每一行。
答案 1 :(得分:3)
使用GNU sed,在第$rowno
行替换$colno
次出现的非空格字符$newtext
值:
sed -E "${rowno}s/[^ ]*( *)/${newtext}\1/${colno}" file