我在一个文件夹中有一堆gzip压缩文件,每个文件的每一行都是以下形式:
thing, thing2, something, thing4, other_thing, etc...
我想要做的就是用标签替换每个文件每行中的前两个逗号,这样每行应该如下所示:
thing\t thing2\t something, thing4, other_thing, etc...
有大量的这些文件,所以我只是在寻找运行这个巨大替代品的最快,最无痛的方法。最后,我想让所有相同的文件具有相同的文件名,只有一个替换。想法?
答案 0 :(得分:2)
未经测试:
#!/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
答案 1 :(得分:1)
你可以用GNU find和GNU parallel做到这一点:
find . -maxdepth 1 -type f -print0 | parallel -0 \
gzip -dc {} \| sed "s/,/$'\t'/; s/,/$'\t'/" \| gzip \> {}.tmp \; mv {}.tmp {}
与--dry-run
并行运行,看看会发生什么。