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

使AWK中的记录分隔符在最后一条记录后不适用?,awk,Awk,我将OR更改为,。我发现记录分隔符应用于最后一条输出记录之后。有没有办法使它不适用于最后的输出记录 同样地。OFS的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

我将
OR
更改为
。我发现记录分隔符应用于最后一条输出记录之后。有没有办法使它不适用于最后的输出记录


同样地。OFS的
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#默认情况下输出记录分隔符是什么时候的
,\n?谁说是默认值?并以其为例说明其效果。如果它是默认值,你不需要设置它们。我很抱歉!我又读了一遍这个问题。是我的错+1谢谢。我通过
echo“abc”| awk'BEGIN{OFS=“,”}检查
OFS
是否在最后一个字段后应用;{$1=$1;打印$0};'。输出是
a,b,c
,而不是
a,b,c,
。似乎在最后一个字段之后不适用,对吗?那么“分隔符”对记录和字段的含义是否不同呢?是的,除非通过添加字段和OFS在循环中构造记录,否则最后一个字段不会附加OFS。
$ 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.
$ 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