yae*_*ael 0 linux sed awk text-processing csv
我们想将 csv 行中的每个字符串分隔为行
线的例子(可能是其他线,具有相同的概念)
machine23,machine094,machine73,machine83
Run Code Online (Sandbox Code Playgroud)
所以我们试试这个
echo machine23,machine094,machine73,machine83 |awk -F"," '{for(i=1;i<=NF;i++){printf "%-20s", $i};printf "\n"}'
Run Code Online (Sandbox Code Playgroud)
但我们得到
machine23 machine094 machine7 machine83
Run Code Online (Sandbox Code Playgroud)
而是获得以下预期结果
machine23
machine094
machine7
machine83
Run Code Online (Sandbox Code Playgroud)
有什么建议?
$ echo machine23,machine094,machine73,machine83 | tr ',' '\n'
machine23
machine094
machine73
machine83
Run Code Online (Sandbox Code Playgroud)
或者如果您真的想在 awk 中执行此操作(可能是因为您想在 awk 中进行进一步处理):
$ echo machine23,machine094,machine73,machine83 | \
awk -F',' -v OFS='\n' '{$1=$1;$0=$0;print}'
machine23
machine094
machine73
machine83
Run Code Online (Sandbox Code Playgroud)
这使用了一个巧妙的 awk 技巧,如果您更改任何字段(即使将其设置为等于自身,如 in $1=$)然后设置$0=$0, awk 将重新格式化整个输入行 - 将原始字段分隔符(FS,在这种情况下为逗号)替换为输出字段分隔符(OFS在这种情况下为换行符)。