【发布时间】:2013-03-08 20:16:27
【问题描述】:
我想打印仅修改了某些特定列的输入列 ASCII 数据文件。 如果我使用 awk 修改列(例如:$NF=99),当我最终给出“print $0”命令时,它会正确打印输出,但其他列的所有空格填充、格式等都消失了。 (它们基本上都被 OFS 取代了)。
有什么方法可以让 awk 打印完全相同的输入,并且只在指定的列中进行更改? 我需要将此输出提供给另一个具有非常严格的读取格式的 fortran 代码。所以我不能改变行的格式。
如果 awk 不是我应该为此目的使用的软件,您有什么建议?
更新:示例:
连续输入条目。
0 0 0 0 0 0 0 1936 24170 2536 1987 24094 2543 2037 24153 2550 2088 24202 2557 27 24 24.5 10000.0 0.31 0.0 10000.0 0.0 0.0 0.0 0.65
我想将该条目转换为
0 0 0 0 0 0 0 1936 24170 2536 1987 24094 2543 2037 24153 2550 2088 24202 2557 27 24 24.5 10000.0 10000.0 10000.0 10000.0 10000.0 10000.0 10000.0 10000.0
重要的是保持其他列的间距和位置不变。
为了完成我的任务,我能做的最接近的事情是以下命令。
gawk '{output=$0;for (i=0;i<8;i++){output=substr(output,0,97+8*i-1)"10000.0"substr(output, 97+8*(i+1)-1)}; print output}'
【问题讨论】:
-
如果您能具体一点,包括一个示例输入文件以及预期输出,将会有所帮助。
-
这个例子有点帮助,但还不清楚:你只是想用
10000.0替换最后8列数字吗? -
与上面的示例不同,我想替换为给出字段(如 $10、$13 等)。我会注意不要让它插入任何大于可用空格填充的空间。
标签: awk