大括号混乱!

大括号混乱!

大括号问题,包含此文件内容。

one one one

two two two

three 098234

one one one

two two two

three 098234

one one one

two two two

three 098234 ...

awk '{ a[NR]=$0 } END {b=0; for (i=1;i<=NR;i++) { b++; printf "%s",a[i]; if(b==3) {print"";b=0;}}}' file

输出:

one one onetwo two twothree 098234

four four fourfive five fivesix 092834
 ...

连接 3 行,然后添加换行符!

尽管这有效,但大括号的需要或放置并未被正确理解。是否还有其他方法可以在这里使用大括号并获得相同的结果?我看了很多类似的例子,都达不到我想要的结果。

不确定我的问题是否有意义,但是有一个简单的方法吗经验法则到大括号。谢谢

答案1

awk通过明确的换行符可能会更好地理解您的陈述

awk '
         { a[NR]=$0 }    # Applies to every line of input

    END  {               # Executed once, when there is no more data
             b=0;
             for (i=1;i<=NR;i++) {
                 b++;
                 printf "%s",a[i];
                 if (b==3) {
                     print"";
                     b=0;
                 }
             }
         }
' file

根据您连接每三行数据的要求,这看起来是非常低效的代码,因为它在进行任何处理之前读取整个文件。

试试这个,它一次只缓冲三行:

awk '{s=s $0} NR>1&&!((NR)%3) {print s;s=""}' data

展开后看起来像这样

awk '
                    { s=s $0 }           # Append this line to the buffer
    NR>1 && !(NR%3) { print s; s="" }    # Print the buffer every three lines
' data

第一行的表达式(NR%3)每隔三行就达到零。否定!了这一点,因此它仅{...}每隔三行触发该组件。

相关内容