2015-05-29 75 views
0

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

任何人都可以建议如何做到这一点?

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

结合起来,从文件的beggining删除线的命令是

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

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

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

wc -l file.csv 

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

预先感谢您

+0

可能的重复[如何从文件中删除除最后10行以外的所有内容?](http://stackoverflow.com/questions/3775383/how-can-i-remove-all-but-the-last -10-lines-from-a-file) –

+3

用途:'tail -n -1000 file> newfile; mv newfile file' – user3439894

+0

住房可以工作,但如果我可以编辑文件而不创建新文件,它会更方便。 – manolish

回答

1

假设的bash的外壳,“文件”是文件(存在):

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文件的目录?

+0

正是我需要的。谢谢。 – manolish

+0

是否可以循环所有.csv文件? – manolish