Shell-Script

將多個目錄中的文件從製表符分隔轉換為逗號分隔

  • June 17, 2021

我正在執行 Mac OS。

我有一個目錄/Users/sethparker/Documents,其中包含幾個子目錄/Users/sethparker/Documents/dir1, /Users/sethparker/Documents/dir2, /Users/sethparker/Documents/dir3. 每個子目錄都填滿了同名的、製表符分隔的文件file1.txtfile2.txtfile3.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(和spongemoreutils包中)

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!"

引用自:https://unix.stackexchange.com/questions/654673