我改变ORS
了,
.我发现记录分隔符在最后一个输出记录之后应用.有没有办法让它不适用于最后的输出记录?
同样.也OFS
同样适用于最后一个字段?如果是的话,我可以做到吗?
有几个技巧.
一个是,不使用内置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