【问题标题】:problems with cut (unix)剪切问题(unix)
【发布时间】:2010-06-02 11:01:06
【问题描述】:

cut 有一个奇怪的问题 我写了脚本,我有行:

... | cut -d" " -f3,4 >! out

cut 接收到这个数据(我用 echo 检查过)

   James             James              033333333 0              0.00

但我在out 中收到空行,有人可以解释原因吗?

【问题讨论】:

    标签: unix scripting csh tcsh


    【解决方案1】:

    您需要压缩空格序列,以便将每个空格字符串替换为单个空格。 tr command's -s(挤压)选项非常适合:

    $ ... | tr -s " " | cut -d" " -f3,4 >! out
    

    【讨论】:

      【解决方案2】:

      如果您想要文本文件中的字段,awk 几乎总是答案:

      ... | awk '{print $3" "$4}'
      

      例如:

      $ echo 'James     James      033333333 0              0.00' | cut -d" " -f3,4
      
      $ echo 'James     James      033333333 0              0.00' | awk '{print $3" "$4}'
      033333333 0
      

      【讨论】:

      • 哦,我可以不用awk吗,我不能用它,它是我项目的一部分,我只用cut,grep,sort,uniq,head,tail来做
      • 这些命令都不会将多个空格压缩为一个。你确定它不是输入中的标签吗?
      • 是的,我确定,但是没有 awk 怎么办,我没有固定间距?
      【解决方案3】:

      Cut 不会将多个空格视为单个空格,因此它匹配空格之间的“虚无”。

      当您遗漏>! out 部分时,您会得到空行吗?即,您是否针对正确的字段?

      如果您的输入字符串使用固定间距,您可能希望使用 cut -c 4-10,15-20 | tr -d ' ' 提取字符组 4-10 和 15-20 并从中删除空格。

      【讨论】:

      • 是的,当然是 5 个元素,但我不知道虚无,我该如何更改它我需要第 4 和第 5 个字段?
      • 您可以使用另一种形式的剪切(请参阅我编辑的帖子),或者您可以使用 awk(请参阅下一个答案)。
      【解决方案4】:
      ... | grep -o "[^ ]*"
      

      将提取字段,每个字段位于单独的行上。然后你可能会领导/跟踪他们。不确定是否将它们再次放在同一行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-11
        • 2023-03-12
        • 2013-02-28
        相关资源
        最近更新 更多