linux cron 截断大文件
linux cron truncate large file
我有一个很大的 csv 文件,我需要每天通过 cron 作业将其减少到最后 1000 行。
任何人都可以建议如何完成此操作吗?
目前我只有两个命令,但不知道如何组合它们
从文件开头删除行的命令是
ed -s file.csv <<< $'1,123d\nwq'
其中 123 是需要从文件开头删除的行数
要读取文件中的行数,命令是
wc -l file.csv
我需要从中减去 1000 并将结果传递给第一个命令
有什么办法可以将wc命令的结果合并到ed命令中吗?
提前致谢
假设 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 文件的目录?
我有一个很大的 csv 文件,我需要每天通过 cron 作业将其减少到最后 1000 行。
任何人都可以建议如何完成此操作吗?
目前我只有两个命令,但不知道如何组合它们
从文件开头删除行的命令是
ed -s file.csv <<< $'1,123d\nwq'
其中 123 是需要从文件开头删除的行数
要读取文件中的行数,命令是
wc -l file.csv
我需要从中减去 1000 并将结果传递给第一个命令 有什么办法可以将wc命令的结果合并到ed命令中吗?
提前致谢
假设 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 文件的目录?