如何使用Bash / Sed / Awk在文件夹中的每个gz上运行RegExp Sub?

时间:2012-10-25 08:54:46

标签: bash sed awk

我在一个文件夹中有一堆gzip压缩文件,每个文件的每一行都是以下形式:

thing, thing2, something, thing4, other_thing, etc...

我想要做的就是用标签替换每个文件每行中的前两个逗号,这样每行应该如下所示:

thing\t thing2\t something, thing4, other_thing, etc...

有大量的这些文件,所以我只是在寻找运行这个巨大替代品的最快,最无痛的方法。最后,我想让所有相同的文件具有相同的文件名,只有一个替换。想法?

2 个答案:

答案 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并行运行,看看会发生什么。