Linux

如何將csv行中的每個字元串分隔為行

  • August 28, 2019

我們想將 csv 行中的每個字元串分隔為行

線路範例(可以是其他線路,具有相同的概念)

machine23,machine094,machine73,machine83

所以我們試試這個

echo machine23,machine094,machine73,machine83 |awk -F"," '{for(i=1;i<=NF;i++){printf "%-20s", $i};printf "\n"}'

但我們得到

machine23   machine094  machine7  machine83 

而是得到以下預期結果

machine23
machine094 
machine7 
machine83 

有什麼建議麼?

$ echo machine23,machine094,machine73,machine83 | tr ',' '\n'
machine23
machine094
machine73
machine83

或者如果您真的想在 awk 中執行此操作(可能是因為您想在 awk 中進行進一步處理):

$ echo machine23,machine094,machine73,machine83 | \
 awk -F',' -v OFS='\n' '{$1=$1;$0=$0;print}'
machine23
machine094
machine73
machine83

這使用了一個簡潔的 awk 技巧,如果您更改任何欄位(即使通過將其設置為等於自身,如 in $1=$)然後 set $0=$0,awk 將重新格式化整個輸入行 -FS用輸出欄位分隔符(OFS,在這種情況下為換行符)。

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