我搜索了文件,但找不到这个特定的问题,并且在拼凑 awk 部分以得出答案时遇到困难。我有一个 Unix 文件,其中有大约十二个由管道分隔的列。我想获取这个分隔文件,将其转换为 .csv 并自动将其邮寄给员工以在 Excel 中打开。我的问题是某些列内部有逗号(例如:|RYAN, NOLAN|,这使得转换为 .csv 出现问题。
有谁知道 awk/sed/perl 中的一种方法可以找到存在逗号的列(单行中可能有多个实例)并用双引号将每个列括起来,这将允许 Excel正确打开单个列?
前数据集:
MSH|^~\&|IMT7||EXSCH|384^SCH|20150202082830||MFN^M02|RYAN, NOLAN|P|2.2|Last|First|DOE, JOHN|...
我希望上面的内容变成:
MSH|^~\&|IMT7||EXSCH|384^SCH|20150202082830||MFN^M02|"RYAN, NOLAN"|P|2.2|Last|First|"DOE, JOHN"|...
先谢谢各位高手了! 戴夫
最佳答案
使用 awk
awk -F '|' -v OFS='|' '{for(i=1;i<=NF;++i){if($i~/,/){$i="\""$i"\""}};print}' file
示例
echo "MSH|^~\&|IMT7||EXSCH|384^SCH|20150202082830||MFN^M02|RYAN, NOLAN|P|2.2|Last|First|DOE, JOHN|..."|awk -F '|' -v OFS='|' '{for(i=1;i<=NF;++i){if($i~/,/){$i="\""$i"\""}};print}'
结果
MSH|^~\&|IMT7||EXSCH|384^SCH|20150202082830||MFN^M02|"RYAN, NOLAN"|P|2.2|Last|First|"DOE, JOHN"|...
使用 sed 方法
sed 's/|\([^|]\+,[^|]\+\)|/|"\1"|/g' file
关于regex - awk/sed 帮助 - 如何查找包含逗号然后用双引号引起来的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28551617/