我有一个文件,其中一些数据如下所示:
Archie McNichol:(206) 548-1348:250:100:175
我想把最后的 175 加 100,所以它会打印出来:
Archie McNichol:(206) 548-1348:250:100:275
这确实是我所拥有的:
#!/bin/bash
while IFS=: read -r -a LINE
do
added=${LINE[3]} | 100
echo "${LINE[0]}" $added+100
done < "$1"
答案1
正如杰森·乌瑞安评论的那样:
$ awk -F: '{$NF += 100}1' file
或者,纠正明显的遗漏(OFS
)并按照我的方式编写,
$ awk -v FS=':' -v OFS=':' '{ $NF += 100 } { print }' file >file.new
或者,
$ awk -v FS=':' -v OFS=':' '{ $NF += 100; print }' file >file.new
这将从读取file
并创建一个名为 的新文件file.new
。
这个简短的awk
脚本将每一行视为file
由:
- 分隔的字段组成。通过使用,$NF
我们可以访问每行的最后一个字段,并且$NF += 100
无论它的值是什么,我们都可以添加 100。
会print
输出修改后的行(1
注释解中是一个真值,提示awk
执行打印当前行的默认动作)。
命令行选项-v FS=':' -v OFS=':'
将输入和输出字段分隔符设置为:
。
使用单行输入对其进行测试:
$ echo 'Archie McNichol:(206) 548-1348:250:100:175' | awk -v FS=':' -v OFS=':' '{ $NF += 100 } { print }'
Archie McNichol:(206) 548-1348:250:100:275