【问题标题】:AWK scripting :How to remove Field separator using awkAWK 脚本:如何使用 awk 删除字段分隔符
【发布时间】:2010-06-02 12:29:18
【问题描述】:

需要以下输出

ONGC044 
ONGC043
ONGC042
ONGC041
ONGC046
ONGC047

从这个输入

Medium Label                   Medium ID                            Free Blocks
===============================================================================
[ONGC044] ECCPRDDB_FS_43       ac100076:4aed9b39:44f0:0001            195311616
[ONGC043] ECCPRDDB_FS_42       ac100076:4aed9b1d:44e8:0001            195311616
[ONGC042] ECCPRDDB_FS_41       ac100076:4aed9af4:4469:0001            195311616
[ONGC041] ECCPRDDB_FS_40       ac100076:4aed9ad3:445e:0001            195311616
[ONGC046] ECCPRDDB_FS_44       ac100076:4aedd04a:68c6:0001            195311616
[ONGC047] ECCPRDDB_FS_45       ac100076:4aedd4a0:6bf5:0001            195311616

【问题讨论】:

    标签: shell awk


    【解决方案1】:
    awk -F"[][]" 'NR>2{print $2}' file
    

    【讨论】:

    • 这完全正确。它使用匹配][ 的正则表达式作为其FS。
    • 谢谢 - 一直想知道 究竟如何 告诉 awk 使用方括号作为字段分隔符...
    • 有人能解释一下为什么会这样吗?不应该是-F "[\[\]]吗?
    【解决方案2】:

    我想你想要的是:

    awk '/^\[.*\]/  {print substr($1,2,7)}' < ~/tmp/awk_test/file
    

    这假设您的第一个字段每次正好是 9 个(其中 7 个是您想要的)字符。如果不是这种情况,请改用以下内容从第一个字段中删除 [ 和 ]:

    awk '/^\[.*\]/  {gsub(/[\[\]]/,"",$1); print $1 }' < ~/tmp/awk_test/file
    

    【讨论】:

      【解决方案3】:

      如果数据真的那么统一,一个非常简单的管道:

      cut -b 2-8
      

      会为你做的。

      (哦,除了前两行;如果需要,请在管道中使用 grep ^\[ 删除它们)

      【讨论】:

      • 我认为他想要 awk 中的答案。此外,该 grep 需要用于 '^\['。
      • grep 的好点 - 将编辑。不过,我不确定 awk 限制 - 它在标题中提到,但不是问题本身。除了作为学习练习之外,我想不出为什么需要 awk - 这当然是有效的。
      • 无论如何,我为您 +1 了答案的简单性和实用性。在这种情况下,cut 更容易读/写。
      【解决方案4】:

      这是一个只涉及 awk 的解决方案。这个想法是让 awk 解析所需的列并从此标记中删除不需要的方括号。唯一的“技巧”是“逃脱”[ 字符,以免它被理解为开放重置。 (我们也可以使用substr 代替,因为括号应该是第一个和最后一个字符)

      {
           #skip the column header lines
           if (NR < 3)
             next;
      
           # $1 is almost what we want: [xxxx] 
           #   ==> just remove the square brackets
           sub("[[]", "", $1);
           sub("]", "", $1);
           print $1;
      }
      

      【讨论】:

        猜你喜欢
        • 2019-02-20
        • 1970-01-01
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 1970-01-01
        • 2014-04-27
        相关资源
        最近更新 更多