当前位置:  开发笔记 > 编程语言 > 正文

AWK中的记录分隔符在最后一条记录后不适用?

如何解决《AWK中的记录分隔符在最后一条记录后不适用?》经验,为你挑选了1个好方法。

我改变ORS,.我发现记录分隔符在最后一个输出记录之后应用.有没有办法让它不适用于最后的输出记录?

同样.也OFS同样适用于最后一个字段?如果是的话,我可以做到吗?



1> karakfa..:

有几个技巧.

一个是,不使用内置ORS.

例如,而不是

$ seq 5 | awk -v ORS=",\n" '{print $0}'
1,
2,
3,
4,
5,

做这个

$ seq 5 | awk '{printf "%s%s",sep,$0; sep=",\n"} END{print ""}'
1,
2,
3,
4,
5

另一个技巧是从输入文件中删除最后一个新行并使用RT作为代理(可能只是gawk)

$ seq 5 | head -c -1 | awk -v ORS=",\n" '{printf "%s%s",$0,RT?ORS:""}'
1,
2,
3,
4,
5   # <-- no newline here but you can add in the END block.

对于OFS,你可以做类似的事情.

$ paste <(seq 5) <(seq 11 15) 
  | awk -v OFS=, '{sep=""; for(i=1;i<=NF;i++) {printf "%s",sep $i*$i; sep=OFS} printf "\n"}'

1,121
4,144
9,169
16,196
25,225

请注意,如果您没有在循环中构造线,只需添加以逗号分隔的字段即可解决问题.例如print $1*$1, $2*$2

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有