2016-01-08 53 views

回答

6

有几个技巧。

一个是,不使用内置的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作为代理(可能是唯一的呆子)

$ 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

+0

由于何时输出记录分隔符默认',\ n'? – hek2mgl

+0

谁说这是默认?它被设置为一个例子来显示效果。如果它是默认值,那么无论如何都不需要设置它们。 – karakfa

+0

@ hek2mgl什么不明确? – karakfa

相关问题