使用awk转换数据格式?

时间:2018-02-28 08:53:42

标签: awk

有一个文件包含'n*1'格式的数据:

1
2
3
4
5
6

有没有办法将其转换为'n*3'格式,如:

1,2,3
4,5,6  

通过awk而非使用for loop

真的不知道这个。感谢任何帮助或关键词。

5 个答案:

答案 0 :(得分:3)

使用awk

$ 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

$ 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