繁体   English   中英

在循环中打印第一行和最后 n 行 | awk

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM