输入.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
;否则它发送一个与当前行连接的逗号。