2

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

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

我要做的就是用制表符替换每个文件每行中的前两个逗号,以便每一行看起来像:

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

这些文件有很多,所以我只是在寻找最快、最轻松的方式来运行这个巨大的替代品。最后,我希望所有相同的文件都具有相同的文件名,并且只有一个替换。想法?

4

2 回答 2

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
于 2012-10-25T09:04:51.583 回答
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,看看会发生什么。

于 2012-10-25T13:45:18.963 回答