私はMac OSを使用しています。
/Users/sethparker/Documents
複数のサブディレクトリを持つディレクトリがあります/Users/sethparker/Documents/dir1
。各サブディレクトリは、タブで区切られた同じ名前のファイル、、で埋められます。/Users/sethparker/Documents/dir2
/Users/sethparker/Documents/dir3
file1.txt
file2.txt
file3.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/*/*