在 Linux/Unix 命令行中,我想要将其转换为:
A
B
C
A
B
C
.
.
.
变成这样:
A,B,C
A,B,C
...
是否有一个简单的内置命令可以执行此操作,或者是否需要深入研究 Awk、Perl 等?
答案1
不知道有这样的内置功能。使用Bash
你可以:
while read a && read b && read c ; do echo $a,$b,$c ; done < file
答案2
这太可怕了,肯定是这样的
tr \\n ' '
会做同样的事吗?
例如,要连接文件的行文件行使用
cat file_lines | tr \\n ' '
答案3
POSIX 解决方案pr
:
pr -3 -a -t -s, file
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pr.html
答案4
这是一个解决方案awk
:
awk '{printf "%s%s", $1, NR%3 ? "," : "\n"}'
对于大文件来说,它比提出的解决方案要快得多xargs
。
更新:如果行数不是 3 的倍数。
awk '{printf "%s%s", d, $1; d=NR%3 ? "," : "\n"}'