Linux   发布时间:2022-05-08  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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

@H_674_34@解决方法
如果你不害怕使用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.

大佬总结

以上是大佬教程为你收集整理的linux – unix – cut命令(添加自己的分隔符)全部内容,希望文章能够帮你解决linux – unix – cut命令(添加自己的分隔符)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: