Bash,在csv文件中切换列,并用引号除以`,`

时间:2019-09-03 10:59:36

标签: bash csv awk switch-statement

在bash中,如何在csv中切换2列(第二列切换为最后一列),并用引号除以,

输入文件

...

232948,55,Titulka,"Vnitřní štuk, jemný 25 kg",https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg
232948,55,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg
232948,79,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg
232948,79,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg

...

预期产量

...

232948,Titulka,"Vnitřní štuk, jemný 25 kg",https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg,55
232948,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg,55
232948,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg,79
232948,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg,79

...

我尝试过

awk -F ',' ' { t = $2; $2 = $6; $6 = t; print; } ' OFS=',' "input-file.csv" > "output-file.csv"

它可以工作,但是对于带引号的行来说,这是有问题的,它也需要在,中使用"

如何使用"进行数组处理?

谢谢。

1 个答案:

答案 0 :(得分:3)

要确保GC.Collect()不会在字段中引起逗号混乱,请将awkFPAT一起使用

gnu awk
  • awk -v FPAT="([^,]+)|(\"[^\"]+\")" -v OFS=, '{$0=$0OFS$2;$2=f;sub(/,,/,",")}1' file 232948,Titulka,"Vnitřní štuk, jemný 25 kg",https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg,55 232948,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg,55 232948,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg,79 232948,Titulka,Vnitřní štuk jemný 25 kg,https://eshop.unihobby.cz/stavba-stavebni-materialy-sparovaci-hmoty-a-stuky-stuk-vnitrni-jemny-25kg/142812p/?utm_source=kupi&utm_medium=letak&utm_campaign=9_2019,https://eshop.unihobby.cz/bin/product/4/232948.jpg,79 这定义了字段的外观,而不是字段分隔符
  • FPAT="([^,]+)|(\"[^\"]+\")"将第二个字段移到结尾并删除第二个字段。
  • $0=$0OFS$2;$2=f;sub(/,,/,",")正确,默认操作1