shell - 在循环中打印第一行和最后 n 行 | 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
所以它的输出应该是
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
推荐阅读
- ios - 如何在 iOS 中拨打电话时隐藏 *DTMF* 号码
- c++ - 以下代码使用构造函数对字符串进行排序有什么问题?
- reactjs - 如何在 ReactTable V7 中管理 noDataComponent 或显示未找到的行
- amazon-web-services - 将 Kong 与 AWS EKS 结合使用
- python - flask-migrate:在迁移中运行自定义 SQL?
- javascript - JavaScript 正在返回一个重复的小数
- odoo-13 - 什么是 context_today?
- ubuntu - Ansible 出现奇怪的文件权限/身份验证错误
- javascript - 动态生成一个
- 从 Javascript 中的输入数组中列出
- python - 如何将带有 .Net 应用程序的 Python 作为一个安装可执行文件分发?