我在一个文件夹中有一堆gzzpiped文件,其中每个文件的每行都是表单:
thing, thing2, something, thing4, other_thing, etc...
我要做的就是用标签替换每条文件中每一行的前两个逗号,以便每行看起来像:
thingt thing2t something, thing4, other_thing, etc...
有很多这些文件,所以我只是在寻找运行这个巨大替代品的最快,最无痛的方式。最后,我想将所有相同的文件都具有相同的文件名和一个替换的所有相同的文件。想法?
未测试:
#!/bin/bash
[[ -d $1 ]] || exit 1
for gz in "$1"/*.gz ; do
zcat "$gz" | sed 's/,/t/;s/,/t/' > "$gz".tmp
gzip "$gz".tmp
mv "$gz".tmp.gz "$gz"
done
您可以使用gnu find和gnu并行执行此操作:
find . -maxdepth 1 -type f -print0 | parallel -0
gzip -dc {} | sed "s/,/$'t'/; s/,/$'t'/" | gzip > {}.tmp ; mv {}.tmp {}
与--dry-run
平行运行以查看会发生什么。