Shell-Script
將多個目錄中的文件從製表符分隔轉換為逗號分隔
我正在執行 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
有沒有一種有效的方法可以一次將這種類型的處理應用於所有子目錄中的所有文件?
如果您可以安全地為所有子目錄和這些子目錄中的所有文件執行此命令,那麼您只需要:
sed -i "" 's/\t/,/g' /Users/sethparker/Documents/*/*
為了處理邊緣情況(例如出現在引用欄位中的製表符,或出現在未引用欄位中的逗號*)*,建議對 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!"