[英]print first and last n rows in a loop | awk
我有一个包含 n 行的文本文件,我想打印第一行,然后打印最后 n 行,依此类推
我编写了如下代码,但希望它循环运行,直到覆盖所有行。
cat test6.txt | awk '{a[NR]=$0} NR<=1 {print} END{for (i=NR-n;i<=NR;i++) print a[i]}' n=3
猫 test6.txt
abc1
abc2
abc3
abc4
abc5
abc6
abc7
abc8
abc9
abc10
abc11
abc12
abc13
所以应该是 output
abc1
abc11
abc12
abc13
abc2
abc8
abc9
abc10
abc3
abc5
abc6
abc7
abc4
$ cat tst.awk
{ a[NR] = $0 }
END {
end = NR
for (i=1; i in a; i++) {
print a[i]
delete a[i]
for (j=end-n+1; j<=end; j++) {
if ( j in a ) {
print a[j]
delete a[j]
}
}
end -= n
}
}
.
$ awk -v n=3 -f tst.awk file
abc1
abc11
abc12
abc13
abc2
abc8
abc9
abc10
abc3
abc5
abc6
abc7
abc4
另一个awk
$ awk -v c=3 '{a[NR]=$0}
END {k=NR;
for(i=1;i<=k;i++)
{print a[i];
for(n=c; i<k && n--; k--) print a[k]}}' file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.