linux cut 添加分隔符,linux – unix – cut命令(添加自己的分隔符)

给定一个包含这样数据的文件(即stores.dat文件)

id storeNo type

2ttfgdhdfgh 1gfdkl-28 kgdl

9dhfdhfdfh 2t-33gdm dgjkfndkgf

期望的输出:

id |storeNo |type

2ttfgdhdfgh |1gfdkl-28 |kgdl

9dhfdhfdfh |2t-33gdm |dgjkfndkgf

想添加一个“|”这3个切割范围中的每一个之间的分隔符:

cut -c1-18,19-30,31-40 stores.dat

在每个剪切之间插入分隔符的语法是什么?

BONUS pts(如果您可以提供修剪值的选项):

id|storeNo|type

2ttfgdhdfgh|1gfdkl-28|kgdl

9dhfdhfdfh|2t-33gdm|dgjkfndkgf\

更新(感谢Mat的回答)我最终在这个解决方案上取得了成功 – (它有点乱,但带有我的bash版本的SunOS似乎不支持更优雅的算法)

#!/bin/bash

unpack=""

filename="$1"

while [ $# -gt 0 ] ; do

arg="$1"

if [ "$arg" != "$filename" ]

then

firstcharpos=`echo $arg | awk -F"-" '{print $1}'`

secondcharpos=`echo $arg | awk -F"-" '{print $2}'`

compute=`(expr $firstcharpos - $secondcharpos)`

compute=`(expr $compute \* -1 + 1)`

unpack=$unpack"A"$compute

fi

shift

done

perl -ne 'print join("|",unpack("'$unpack'", $_)), "\n";' $filename

用法:sh test.sh input_file 1-17 18-29 30-39

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值