【问题标题】:Unix: Filter & Manipulate Column Data in CSVUnix:过滤和操作 CSV 中的列数据
【发布时间】:2016-01-26 23:07:03
【问题描述】:

在 Unix 中,我如何转换 CSV 文件:

"0.4542703549","PRO000029D00QWERT","1.562"
"0.1585242685","PRO000030K00QWERT","4.833"
"0.4542703549","PRO000031K00QWERT","0.011"
"0.8917651385","PRO000032K00QWERT","3.057"

收件人:

"29","0.4542703549","1.562"
"30","0.1585242685","4.833"
"31","0.4542703549","0.011"
"32","0.8917651385","3.057"

本质上,我想从第二列中删除所有内容(数字 1-9 除外),然后交换第 1 列和第 2 列的位置。

提前感谢您的帮助..

【问题讨论】:

  • 你可以试试sed -r 's/^(.*),"PRO0*([0-9]+).*,(.*)$/"\2",\1,\3/g' file

标签: linux csv unix awk sed


【解决方案1】:

sed 最简单

sed 's/\("[^"]*"\),"PRO0*\([0-9]\{1,\}\)[^"]*"/\"\2",\1/' YourFile

另类

awk -F ',' -v 'quote="' '{print quote substr($2,5,6) + 0 quote "," $1 "," $3 }' YourFile

【讨论】:

  • 只是一个更正:awk命令中$1后面的逗号应该用引号括起来:awk -F ',' -v 'quote="' '{print quote substr($2,5,6) + 0 quote "," $1 "," $3 }' YourFile
  • 对,按 printf 的习惯忘记了,后更正
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 2015-10-27
  • 2020-11-07
  • 2020-09-22
相关资源
最近更新 更多