複数のディレクトリのファイルをタブ区切りファイルからコンマ区切りファイルに変換する

複数のディレクトリのファイルをタブ区切りファイルからコンマ区切りファイルに変換する

私はMac OSを使用しています。

/Users/sethparker/Documents複数のサブディレクトリを持つディレクトリがあります/Users/sethparker/Documents/dir1。各サブディレクトリは、タブで区切られた同じ名前のファイル、、で埋められます。/Users/sethparker/Documents/dir2/Users/sethparker/Documents/dir3file1.txtfile2.txtfile3.txt

拡張子自体は重要ではありませんが、すべてのサブディレクトリ内のすべてのファイルをコンマ区切り形式に変換したいと思います。私の現在のアプローチは、各サブディレクトリで短いスクリプトを実行することです。

cat tsv_to_csv.sh
for ifile in {1..3};
do
sed -i "" 's/\t/,/g' file${ifile}*
done

このタイプの処理をすべてのサブディレクトリ内のすべてのファイルに同時に適用する効率的な方法はありますか?

答え1

極端なケース処理引用しないフィールド)、CSVデータにはCSVパーサーを使用することをお勧めします。

使用csvkit(そして包装spongeから)moreutils

for file in glob_pattern; do
    csvformat --tabs --out-delimiter , "$file" | sponge "$file"
done

デモ:

$ cat input.tsv
first   "second third"  fourth
she said    Hello, world!

最初の行には引用符付きのタブがあります。

$ csvformat --tabs --out-delimiter , input.tsv
first,second    third,fourth
she,said,"Hello, world!"

答え2

これを安全に実行できればみんなサブディレクトリとみんな必要なサブディレクトリのファイルは次のとおりです。

sed -i "" 's/\t/,/g' /Users/sethparker/Documents/*/*

関連情報