linux – unix – cut命令(添加自己的分隔符)
发布时间:2020-12-13 23:55:47 所属栏目:Linux 来源:网络整理
导读:给定一个包含这样数据的文件(即stores.dat文件) id storeNo type2ttfgdhdfgh 1gfdkl-28 kgdl9dhfdhfdfh 2t-33gdm dgjkfndkgf 期望的输出: id |storeNo |type2ttfgdhdfgh |1gfdkl-28 |kgdl9dhfdhfdfh |2t-33gdm |dgjkfndkgf 想添加一个“|”这3个切割范围中
给定一个包含这样数据的文件(即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 解决方法
如果你不害怕使用perl,这里有一个单行:
$perl -ne 'print join("|",unpack("A17A12A10","n";' input 解包调用将提取一个17字符串,然后是一个12字符串,然后从输入行中提取一个10字符串,并将它们返回到一个数组(剥离空格). join添加| s. 如果你想让输入列是x-y格式,而不是写一个“真正的”脚本,你可以像这样破解它(但它很难看): #!/bin/bash unpack="" while [ $# -gt 1 ] ; do arg=$(($1)) shift unpack=$unpack"A"$((-1*$arg+1)) done perl -ne 'print join("|","n";' $1 用法:t.sh 1-17 18-29 30-39 input_file. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |