我有一个包含2000个压缩文件的目录/user/test
。我想检查如果任何给定的文件有5条记录,那么我必须以解压缩的格式存储它。
我能够连续地做这件事,但完成这项工作需要很多时间。
我连续地做了如下工作:
for i in `find /user/test -iname "abc*.gz"`;
do
lines=`zcat $i | wc -l`
if [ $lines = 5 ]; then
fname=`basename -s .$file_ext $i`
echo "copying $fname to new path"
`zcat $i > new_path/$fname`
cnt=$((cnt+1))
else
echo "Ignoring file $i. Expecting 5 records. It has more or less records"
fi
done
我想同时做同样的事情。
我尝试浏览GNU parallel
,但看到一个错误。我在指挥部下面试过了
find /user/test -iname "abc*.gz" |
parallel 'zcat {} | awk 'NR == 5 {print $0}' < {}.txt'
上面的命令不起作用,抛出错误。
1条答案
按热度按时间xytpbqjk1#
未经测试:
根据您连续执行的操作:
其总体思想是构建一个bash函数,该函数处理单个输入。
export
函数(以及该函数所需的变量)并并行运行该函数。这样做的好处是,在单个输入上测试该函数非常容易。
在编写函数时有一个小问题:函数不能写入硬编码文件,因为这会造成争用条件(多个示例同时写入)。因此,您需要以一种不会发生这种情况的方式编写函数。