有一个文件包含'n*1'
格式的数据:
1
2
3
4
5
6
有没有办法将其转换为'n*3'
格式,如:
1,2,3
4,5,6
通过awk
而非使用for loop
?
真的不知道这个。感谢任何帮助或关键词。
答案 0 :(得分:3)
$ awk '{printf "%s%s",$0,(NR%3==0?ORS:",")}' File
1,2,3
4,5,6
命令printf "%s%s",$0,(NR%3==0?ORS:",")
告诉awk打印两个字符串。第一个是$0
,它是当前行。第二个字符串是NR%3==0?ORS:","
,它是输出记录分隔符的ORS(如果行号是三的倍数),或者是所有其他行号的,
。
$ sed 'N;N;s/\n/,/g' File
1,2,3
4,5,6
默认情况下,sed逐个读取文件中的每一行。 N
告诉sed读取另一行,将该行追加到当前行,用换行符分隔。 N;N
告诉sed这样做两次,这样我们在模式空间中总共有三行。 s/\n/,/g
告诉sed用逗号替换这两个分隔符换行符。然后打印结果。
以上假设我们使用的是GNU sed。通过微小的修改,可以使用BSD / OSX sed。
答案 1 :(得分:2)
最简单的一个 - paste
命令:
paste -d, - - - <file
输出:
1,2,3
4,5,6
答案 2 :(得分:1)
以下内容对您有帮助。
xargs -n3 < Input_file | sed 's/ /,/g'
答案 3 :(得分:1)
试试这个:
awk 'NR%3==0{print;next}{printf "%s,",$0}' file
或分解:
NR%3==0 # condition, modulo 3 == 0
{print;next} # then print and skip to the first line
{printf "%s,",$0} # printf to not print newlines but current int + ,
答案 4 :(得分:1)
$ awk '{ORS=(NR%3?",":RS)}1' file
1,2,3
4,5,6