linux cron截断大文件

时间:2015-05-29 02:58:23

标签: linux bash csv cron

我有一个大型的csv文件,我需要每天通过一个cron作业减少到最后1000行。

有谁能建议如何做到这一点?

到目前为止,我有两个命令,但不知道如何组合它们

为了从文件的开始删除行,命令是

ed -s file.csv <<< $'1,123d\nwq'

其中123是从文件开头删除所需的行数

为了读取文件中的行数,命令为

wc -l file.csv

我需要从中减去1000并将结果传递给第一个命令 有没有办法在ed命令中组合wc命令的结果?

提前谢谢

1 个答案:

答案 0 :(得分:1)

假设bash是shell,'file'是文件(并且它存在):

sed -i "1,$(( $(wc -l < file) - 1000 ))d" file

编辑:对于行数不超过1000行的文件,上面的简要版本不能正常工作。一个更强大的脚本,处理特定目录中的所有.csv文件:

#!/bin/env bash

DIR=/path/to/csv/files
N=1000

for csv in $DIR/*.csv; do
  L=$(wc -l < $csv)
  [ $L -le $N ] && continue
  sed -i "1,$(($L - $N))d" $csv
done

下一个编辑:处理没有.csv文件的目录?