awk-打印列值而不换行并添加逗号

awk-打印列值而不换行并添加逗号

输入.txt

 EN1
 EN2
 EN3
 EN4
 EN5

输出

EN1,EN2,EN3,EN4,EN5

我已经尝试过 awk。但它不是用逗号打印

awk 'BEGIN { OFS = ","} { printf $1}' input.txt

我有 GNU Awk 4.0.0 版本

答案1

awk 'BEGIN{ORS=","}1' input.txt

产生这个:

EN1,EN2,EN3,EN4,EN5,

所以用逗号打印(所以我不确定我是否理解您在帖子中关于这种情况没有发生的评论),尽管我怀疑尾随逗号是一个问题。

使用 GNU Awk 3.1.7 进行测试

答案2

我知道,老话题,但我无法抗拒 - 这是另一种简短而简单的方法:

$ paste -sd, input.txt
EN1,EN2,EN3,EN4,EN5
$

适用于 Linux 和 Solaris,甚至适用于其他平台。

答案3

您可以tr在这种情况下使用。

tr '\n' ',' <input.txt

这也用逗号替换了最后的换行符。为了避免这种情况,在 Linux 上,如果您知道输入文件确实以换行符结尾:

<input.txt head -c -1 | tr '\n' ,

; echo如果您希望输出以换行符终止,请添加。

或者,您可以让 shell 删除结尾的逗号(如果有)。

columns=$(<input.txt tr '\n' ',')
echo "${columns%,}"

答案4

不在行尾打印逗号的解决方案:

{printf("%s", NR == 1 ? $0 : ","$0);} END {printf("\n");} file

解释

当看到第一行(NR == 1)时,只打印它;否则,逗号和行将作为参数发送到printf

该解决方案使用 的AWK三元运算符?:,即:

NR == 1 ? $0 : ","$0

如果NR变量等于1,则它将第一行作为参数发送到printf;否则它发送一个与当前行连接的逗号。

相关内容