每5个条目后在一行中拆分列 - awk

时间:2016-02-10 11:05:01

标签: awk rows

我有一个类似于以下内容的文件

1
1
1
1
1
1
12
2
2
2
2
2
2
2
3
4

我想要做的是将此列转换为多行。每个新行/行应该在5个条目之后开始,因此输出将像这样

1 1 1 1 1
1 12 2 2 2
2 2 2 2 3
4

我尝试使用

实现这一目标
awk '{printf "%s" (NR%5==0?"RS:FS),$1}' file

但是我收到以下错误

awk: line 1: runaway string constant "RS:FS),$1} ...

关于如何实现所需输出的任何想法?

3 个答案:

答案 0 :(得分:2)

也许这个awk one liner可以提供帮助。

awk '{if (NR%5==0){a=a $0" ";print a; a=""} else a=a $0" "}END{print}' file

输出:

1 1 1 1 1
1 12 2 2 2
2 2 2 2 3
4

更长的awk:

{
    if (NR%5==0)
    {
       a=a $0" ";
       print a;
       a="";
    }
    else
    {
       a=a $0" ";
    }
 }
 END
 {
    print
 }

答案 1 :(得分:1)

略有不同的方法,仍然使用awk:

                   foreach (var item in Items)
                    {
                        Button itemButton = new Button();
                        itemButton.Text = item.name;
                        itemButton.fieldType = item.type;
                        itemButton.fieldId = item.id;
                        itemButton.Click += itemHandler;

                        // add the button in the child panel
                        CustomItemPanel childItemPanel = new CustomItemPanel();
                        childItemPanel.Controls.Add(itemButton);

                        // add to the clicked container panel
                        containerPanel.Controls.Add(childItemPanel);

                    }

使用$ awk '{if (NR%5) {ORS=""} else {ORS="\n"}{print " "$0}}' input.txt 1 1 1 1 1 1 12 2 2 2 2 2 2 2 3 4

perl

答案 2 :(得分:0)

无需复杂化......

$ pr -5ats' ' <file

1 1 1 1 1
1 12 2 2 2
2 2 2 2 3
4