【问题标题】:In shell script, can I specify more than one output delimiter in cut?在 shell 脚本中,我可以在 cut 中指定多个输出分隔符吗?
【发布时间】:2016-11-26 19:29:38
【问题描述】:

我有一个包含以下数据的文件

abcdefghijklmnopqrst

我需要使用命令cut 输出如下

bcd|klm.no|pq.rst

我需要使用 cut 在输出中包含分隔符 |.

我已经使用此代码获得了带有一个分隔符的输出

cat file.txt |cut -c2-4,11-13,14-15,16-17,18-20 --output-delimiter='|'

作为

bcd|klm|no|pq|rst

我可以通过更改命令中的某些内容来获得 2 个输出分隔符吗?

【问题讨论】:

  • 你不能通过cut 运行两次吗?一次用于第一个分隔符,然后再次用于第二个分隔符?
  • @gilez 是的,你可以。

标签: bash shell command sh


【解决方案1】:

两个cuts(由 Gilez 对 OP 的评论建议):

cut -c2-4,11-15,16-20 --output-delimiter='|' file.txt | \
cut -c1-7,8-13,14-15  --output-delimiter='.'

输出:

bcd|klm.no|pqr.st

鉴于这样的常规输入,tr 也可以不用管道“回答”这个问题:

tr -s 'a-t' 'b-d|k-m.no|p-r.st' < file.txt

注意:tr 不能插入,所以听起来不可能。一般来说is是不可能的,但是cheat是把答案包含在SET2中,然后挤出剩下的。

【讨论】:

    【解决方案2】:

    使用 GNU sed:

    $ sed -r 's/.(.{3}).{6}(.{3})(.{2})(.{2})/\1|\2.\3|\4./' file.txt
    bcd|klm.no|pq.rst
    

    【讨论】:

      【解决方案3】:

      cut 一次支持单个分隔符,但您可以轻松地将其替换为简单的 sed 或 Awk 脚本。

      awk '{ print substr($0, 2, 4) "|" substr($0, 11, 13) "."
         substr($0, 14, 15) "|" substr($0, 16, 17) "."
          substr($0,18, 20) }' file.txt
      

      巧合的是cat is useless

      【讨论】:

        猜你喜欢
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 2015-03-07
        • 1970-01-01
        相关资源
        最近更新 更多