awk 替换特定行中的特定列

awk 替换特定行中的特定列

我的数据文件是

sdfsdfsdf
1 0.5000 0.5000 0.5000 8 7 90 135  90 135 1 
2 0.5000 0.5000 0.0000 8 7 90 -45  90 -45 1 
3 0.0000 0.5000 0.5000 8 7 90 225  90 225 1 
4 0.5000 0.0000 0.5000 8 7 90 45   90 45  1 
sdfsdfsdf
sdfsdfsdfsdfsdfsdfsdf

我想更改第 7 和第 9 列 2~5 行,所以结果看起来像

sdfsdfsdf
1 0.5000 0.5000 0.5000 8 7 60 135  60 135 1 
2 0.5000 0.5000 0.0000 8 7 60 -45  60 -45 1 
3 0.0000 0.5000 0.5000 8 7 60 225  60 225 1 
4 0.5000 0.0000 0.5000 8 7 60 45   60 45  1 
sdfsdfsdf
sdfsdfsdfsdfsdfsdfsdf

我如何使用 sed 或 awk 来做到这一点?我试过

awk 'NR>=2&&NR<=5{$7="60"}' input.dat > tmp && mv tmp input.dat

但这不起作用

答案1

尝试:

awk 'FNR==2,FNR==5{$7=$9=60};1' input.dat > tmp

答案2

按以下方式修改您的脚本:

awk '{if (NR>=2&&NR<=5) $7=60; print}' input.dat > tmp && mv tmp input.dat

您在变体中观察到的问题是因为没有显式打印子句 awk 将打印输入行

相关内容