awk使用笔记
今天一同事需要将一个文件的第31列和第32列的数字行替换为86。因为文件很大,因此用手工来改显然不显示,因此得求助于脚本工具。虽然我对这些脚本也不是很精通,但既然答应帮这个忙,就现学现用,完成了这个功能,记录如下。
为了方便记录我将该文件简化一下成下面的格式,文件名为test:
12345 67 89 10
12345 67 89 10
12345 67 89 10
12345 67 89 10
12345 67 89 10
12345 67 89 10
12345 67 89 10
12345 67 89 10
12345 67 89 10
12345 67 89 10
需求可以简化为将3列和第4列替换为86.
如何实现呢?最先我一直去寻找直接替换列的操作,发现找了 很久都未找到,后来转换一下思路。实现如下:
第一步:awk '{print $1}' test
上面的命令是先把第一个字段列取出来,执行结果如下:
12345
12345
12345
12345
12345
12345
12345
12345
12345
12345
第二步:通过使用substr函数
awk '{print substr($1, 1,2) 86 substr($1, 5)}' test
执行结果如下:第三列和第四列已经被替换为86了。
12865
12865
12865
12865
12865
12865
12865
12865
12865
12865
第三步:将后面的字段加上。
awk '{print substr($1, 1,2) 86 substr($1, 5) " " $2 " " $3 " " $4}' test
执行结果如下:
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
12865 67 89 10
成功完成上述需求的功能。