我正在使用join在cron调用的bash脚本中合并几个大型的管道分隔文本文件,大小从8到20 MB不等。如果我在命令行上运行连接或手动执行bash脚本,例如./merge-script.sh
,它运行没有错误,但如果cron运行脚本,我会收到以下内容(我已将cron设置为向我发送结果):join: write error: Disk quota exceeded
。
我正在运行RHEL 5.11并且由于ACL而无法获得quota -v
(我在一个拥有很少权限的非常锁定的环境中)但df -h
表示我不超过我在任何目录中使用的配额的30%(不低于11GB)。
我打算重构这个以递归方式合并文件而不是写入文件然后在下一次合并中使用它(我有四个文件要加入),但是如果有人看到更有效的方法来执行此操作,我和#39;欣赏它,因为我仍然是bash脚本的相对新手。
这是bash脚本:
#!/bin/bash
AFILE=fileA.txt
BFILE=fileB.txt
CFILE=fileC.txt
# join by first field
if [ -f $AFILE ]
then
awk -F'|' -v OFS='|' '{if($3=='01') print $4,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$25,$26,$27,$28,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41}' $AFILE > eA.txt
awk -F'|' -v OFS='|' '{if($3=='02') print $4,$19,$20}' $AFILE > eA2.txt
fi
if [ -f $BFILE ]
then
awk -F'|' -v OFS='|' '{print $4,$8,$9,$10}' $BFILE > eB.txt
fi
if [ -f $CFILE ]
then
awk -F'|' -v OFS='|' '{if($3=='01') print $4,$17,$22,$26}' $CFILE > eC.txt
fi
#TODO: recursive join, pipe
join -j 1 -a1 -a2 -t'|' eA.txt eA2.txt > e3.txt
join -j 1 -a1 -a2 -t'|' e3.txt eB.txt > e4.txt
join -j 1 -a1 -a2 -t'|' e4.txt eC.txt > theFinalFile
rm *.txt
感谢您提供任何建议,非常新的SO,所以请原谅任何faux pas我可能是出于无知。