2

各ファイルの各行が次の形式であるフォルダーに、gzip されたファイルがたくさんあります。

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

各ファイルの各行の最初の 2 つのカンマをタブに置き換えるだけで、各行は次のようになります。

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

これらのファイルは山ほどあるので、この巨大な代替ファイルを実行する最も速く、最も簡単な方法を探しています。最後に、すべての同じファイルを同じファイル名で、その 1 つの置換だけにしたいと考えています。アイデア?

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 に答える