linux cron 截断大文件

标签 linux bash csv cron

我有一个很大的 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 文件的目录?

关于linux cron 截断大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520389/

相关文章:

c - 打印字符数组垃圾

linux - 如何在网页中自动填写表格

c - 如果 execvp 失败则终止子进程

c - 将字符串的 CSV 文件解析为二维字符串数组

sqlite - 导出不带 col.names 的 CSV

c - Pthread - 设置调度程序参数

c - const 说明符在 cast 中的必要性

bash:历史收藏夹文件

linux - 如何确定某个文件中的每一行是否相同?

regex - 从包含特定词的 csv 行中删除特定词