【问题标题】:linux cron truncate large filelinux cron 截断大文件
【发布时间】:2015-05-29 02:58:23
【问题描述】:

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

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

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

从文件开头删除行的命令是

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

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

读取文件行数的命令是

wc -l file.csv

我需要从中减去 1000 并将结果传递给第一个命令 有什么办法可以把 wc 命令的结果合并到 ed 命令中?

提前谢谢你

【问题讨论】:

  • 使用:tail -n -1000 file > newfile; mv newfile file
  • 庇护这行得通,但如果我可以编辑文件而不创建新文件会更方便。
  • 轻微改进:tail -n 1000 file > newfile; cat newfile > file; rm newfile 这保留了“文件”的所有权。如果您从 cronjob 以 root 身份运行,mv 将意味着文件最终归 root 所有。

标签: linux bash csv cron


【解决方案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 文件的目录?

【讨论】:

  • 正是我需要的。谢谢。
  • 是否可以循环遍历所有 .csv 文件?
猜你喜欢
  • 2010-11-02
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多