You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Shell将单行逗号分隔数值按每两个一组转置为两列格式?

将多逗号分隔坐标转换为每行一对的两列格式

你提到的需求非常常见,就是把一行中连续的x,y,x,y,...格式拆分成每行一对x y。除了简单的逗号替换,我们可以用几种工具轻松实现,下面推荐两个最实用的方法:

方法一:用awk(最直观易懂)

awk处理字段分割天生擅长,这个写法逻辑清晰,不容易出错:

awk -F, '{for(i=1;i<=NF;i+=2) print $i, $(i+1)}' 你的文件名.txt

解释:

  • -F, 告诉awk以逗号作为字段的分隔符
  • 循环i=1;i<=NF;i+=2NF是当前行的总字段数,每次步进2,正好每次取一对坐标
  • print $i, $(i+1):awk默认用空格分隔两个字段,完美符合你要的格式

方法二:用sed(纯文本替换方式)

如果你更倾向用sed,可以借助正则表达式的循环替换来实现:

sed -E ':a; s/([^,]+),([^,]+),/\1 \2\n/; ta; s/([^,]+),([^,]+)/\1 \2/' 你的文件名.txt

解释:

  • -E 启用扩展正则表达式,避免写太多转义符
  • :ata 是sed的循环标记:每次匹配到[内容],[内容],就替换成内容 内容\n,替换成功就回到a继续处理,直到没有带结尾逗号的坐标对
  • 最后的s/([^,]+),([^,]+)/\1 \2/ 处理最后一对没有结尾逗号的坐标,把逗号换成空格

举个例子,用你的测试输入:

3.172704445659,50.011996744997,3.1821975358417,50.012335988197,3.2174797791605,50.023182479597

运行上面任意一个命令,都会输出:

3.172704445659 50.011996744997
3.1821975358417 50.012335988197
3.2174797791605 50.023182479597

内容的提问来源于stack exchange,提问作者Suntory

火山引擎 最新活动