使用awk打印列,添加逗号

6 awk

我有一个文件,我想从中检索第一列,并在每个值之间添加逗号.

例:

AAAA 12345 xccvbn
BBBB 43431 fkodks
CCCC 51234 plafad
Run Code Online (Sandbox Code Playgroud)

获得

AAAA,BBBB,CCCC
Run Code Online (Sandbox Code Playgroud)

我决定使用awk,所以我做到了

awk '{ $1=$1","; print $1 }'
Run Code Online (Sandbox Code Playgroud)

问题是:这也在最后一个值上添加一个逗号,这不是我想要实现的,而且我在值之间得到一个空格.

如何删除最后一个元素上的逗号,如何删除空格?花了20分钟看着手册没有运气.

Ed *_*ton 12

$ awk '{printf "%s%s",sep,$1; sep=","} END{print ""}' file
AAAA,BBBB,CCCC
Run Code Online (Sandbox Code Playgroud)

或者如果您愿意:

$ awk '{printf "%s%s",(NR>1?",":""),$1} END{print ""}' file
AAAA,BBBB,CCCC
Run Code Online (Sandbox Code Playgroud)

或者如果你喜欢高尔夫并且不介意它对于大型文件来说效率低下:

$ awk '{r=r s $1;s=","} END{print r}' file
AAAA,BBBB,CCCC
Run Code Online (Sandbox Code Playgroud)

  • 如果你想打高尔夫,那么'awk'{a = as $ 1; s =","} END {print a}'`但是恕我直言,它变得不那么清晰,对于大文件来说效率会降低. (3认同)
  • 哇,这非常明亮:在第一次'printf`之后定义`sep`使它不是第一次出现. (2认同)

小智 6

awk {'print $1","$2","$3'} file_name
Run Code Online (Sandbox Code Playgroud)

这是我知道的最短的


Nil*_*mat 2

你可以这样做:

awk 'a++{printf ","}{printf "%s", $1}' file
Run Code Online (Sandbox Code Playgroud)

a++ 被解释为条件。在第一行中,其值为 0,因此不添加逗号。

编辑:如果您想要换行符,则必须添加END{printf "\n"}. 如果您在读取文件时遇到问题,您还可以尝试:

cat file | awk 'a++{printf ","}{printf "%s", $1}'
Run Code Online (Sandbox Code Playgroud)