【问题标题】:Modifying the output using AWK使用 AWK 修改输出
【发布时间】:2020-06-16 17:16:08
【问题描述】:

有一个如下所示的数据集,用 (:) 冒号分隔:

##L1
Advc:start:TA_Wk;TA_Wk:rstb:ver:trstb.techind_C3_D[0].RESETH:LK

##L2
ner:ted:Unused:C1500:ver:sync3rmsfd0nt_t;tape_out:SOCK0

我正在使用列号,并使用 AWK 将一些字符串附加到它。 我试图忽略遇到的评论#并最后附加它们。

#!/bin/bash
awk -F: '/^#/ {c=$0; sub(/#+/,"", c); next}
{print $1, "-f" " "$4, "-t" " "$6, "-d" " ""{"$3"}", "-t" " ""{"$7"}","-", "\"" c "\""}' s1

输出:

Advc -f rstb -t trstb.techind_C3_D[0].RESETH -d {TA_Wk;TA_Wk} -t {LK} - "L1"
 -f  -t  -c {} -c {} - "L1"
ner -f C1500 -t sync3rmsfd0nt_t;tape_out -d {Unused} -t {SOCK0} - "L2"

期望的输出:

Advc -f rstb -t trstb.techind_C3_D[0].RESETH -d {TA_Wk;TA_Wk} -t {LK} - "L1"
ner -f C1500 -t sync3rmsfd0nt_t;tape_out -d {Unused} -t {SOCK0} - "L2"

1.在第 3 列和第 7 列中,如果诸如“未使用”、“未指定”之类的词是“未使用”、“未指定”,那么它不应该打印它应该忽略的特定列以及附加到它的字符串,如所需输出中所示。

2.如何删除空行。

如上所示,如何在我的代码中修复以上两个条件?

【问题讨论】:

    标签: awk


    【解决方案1】:

    OP 的尝试修复: 在这里修复了 OP 的尝试。您需要跳过空行以正确打印输出,您可以使用简单的 if 条件 + 我在您的尝试中做了一些小的更改,例如在删除 # 部分时将 sub 更改为 gsub,在 @987654326 中设置 : @ 部分 + 给变量定义明确的名称,所以为了更好地理解,我将其更改为 c,而不是 val

    awk 'BEGIN{FS=":"} /^$/{next} /^#/ {val=$0; gsub(/#/,"", val); next}
    {print $1, "-f" " "$4, "-t" " "$6, \
    ($3!="Unused"?"-d" " ""{"$3"}":""),\
     ($7!="Unspecified"?"-t" " ""{"$7"}":""),"-", "\"" val "\""
    }' s1="\""  Input_file
    


    我尝试解决这个问题:使用 GNU awk 中的示例进行编写和测试。

    awk '
    BEGIN{
     FS=":"
    }
    /^$/{
      next
    }
    /^#/{
      val=$0
      gsub(/#/,"", val)
      next
    }
    {
      ($3=$3!="Unused"?"-d" " ""{"$3"}":"")
      ($7=$7!="Unspecified"?"-t" " ""{"$7"}":"")
      print $1, "-f" " "$4, "-t" " "$6, \
      $3,\
      $7,"-", "\"" val "\""
    }' s1="\""  Input_file
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 2021-04-23
    • 2018-08-25
    • 2015-03-19
    • 2020-04-02
    相关资源
    最近更新 更多