大括号问题,包含此文件内容。
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)
每隔三行就达到零。否定!
了这一点,因此它仅{...}
每隔三行触发该组件。