我的测试数据
aa1
bb1
cc1
aa2
bb2
cc2
aa3
bb3
cc3
aa4
bb4
cc4
aa5
bb5
cc5
aa6
bb6
cc6
aa7
bb7
cc7
aa8
bb8
cc8
假设我希望将第 4-6 行 (aa2-cc2) 提取到文件中,然后跳过 6 行并提取第 13-15 行 (aa5-cc5),然后同样跳过 6 行。该过程将重复,直到文件结束。我写了一个 bash 脚本,它适用于小文件。
#!/bin/bash
for i in {2..8..3}; do
sed -n "$((3*i-2))","$((3*i))"p testdata > "$i".part
done
现在我正在处理一个 30 GB 的巨型文件,我的脚本对硬盘不利,因为它会读取同一个文件数千次。我希望通过只读取(并提取我的部分)文件一次来避免硬盘损坏。有没有可以解决我的问题的单行程序?
我不是真正的程序员,所以请忍受我的问题中的任何术语混淆。感谢您的帮助!
最佳答案
只需要一次遍历文件即可。加上一点算术。
awk '{n = NR % 9} 4 <= n && n <= 6' file
关于linux - 提取长度为 X 且间隔为 Y 行的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46955723/