如何使用 sed 命令将不均匀的 TAB 分隔输入文件转换为 CSV 或 PSV?
28828082-1 04/08/19 08:48 04/11/19 12:37 04/12/19 16:22 4/15-4/16 04/17/19 2 9 LCO W OIP 04/08/19 08:53 21 1 58.00 9 222 79 FEDX FEDXH SL3 484657064673 0410099900691041119 SMITHFIELD RI 02917 "41.890066 , -71.548680" YES
上面是 1 行,我尝试使用 sed -r 's/^\s+//;s/\s+/|/g'
但结果不符合预期。
最佳答案
gawk
来救援!
$ awk -vFPAT='([^[:space:]]+)|("[^"]+")' -v OFS='|' '$1=$1' file
28828082-1|04/08/19|08:48|04/11/19|12:37|04/12/19|16:22|4/15-4/16|04/17/19|2|9|LCO|W|OIP|04/08/19|08:53|21|1|58.00|9|222|79|FEDX|FEDXH|SL3|484657064673|0410099900691041119|SMITHFIELD|RI|02917|"41.890066 , -71.548680"|YES
将字段模式定义为非空格或带引号的值,其中可能包含空格(但不包含转义引号),替换用制表符分隔的输出字段,强制解析行,并且在格式更改后将打印非零行。
更好的版本是 ... '{$1=$1;打印}'
。
当然,如果所有字段分隔符都是制表符并且引号字符串不包含任何制表符,那就简单多了。
关于linux - 如何使用 sed 转换不均匀的制表符分隔文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55934724/