我10000
目录中有文件。我想删除行,以便保留文件头中的 2 行、文件尾中的 2 行以及中间的每 100 行。
例如:
#header1
#header2
0 x y
1 x y
...
100 x y
101 x y
...
80000 x y
#tail1
#tail2
应该成为
#header1
#header2
0 x y
100 x y
200 x y
...
80000 x y
#tail1
#tail2
最有效和最简单的方法是什么?我有大约 20 个目录,其中包含 10000 个长度不等的文件,我必须截断它们。
答案1
正如评论所说,awk 是此任务的不错选择。如果这是一次性任务,我只需创建一个基于 awk 的脚本,该脚本从其参数中获取的完整文件写入缩小的文件,然后从 find ... -exec ... 命令中调用它即可。例如
cat $HOME/bin/shrinkit.sh
#!/bin/sh
awk '/^#/ && headcnt<2 {print; ++headcnt}; $1~/^[0-9]+$/ { if(!(cnt%100)) {print}; ++cnt}; cnt && /^#/ && tailcnt<2 {print; ++tailcnt}' "$1" >"$1.tmp" && mv "$1.tmp" "$1"
cd $workdir
find . -type f -exec $HOME/bin/shrinkit.sh {} \;