【问题标题】:awk script grouping with arrayawk 脚本与数组分组
【发布时间】:2010-12-13 07:31:58
【问题描述】:

我正在尝试在 solaris 上执行下面的 awk 脚本,但它给出了类似的错误

awk: syntax error near line 3
awk: bailing out near line 3

哪里有错误,你能帮我解决吗?

输入文件:

$ cat details.txt
Manager1|sw1
Manager3|sw5
Manager1|sw4
Manager2|sw9
Manager2|sw12
Manager1|sw2
Manager1|sw0

需要输出: 将相似的(基于 $1)字段($2)分组在一起,即将特定共同经理下的工程师分组。即所需的输出:

Manager1|sw1,sw4,sw2,sw0
Manager2|sw9,sw12
Manager3|sw5

awk 解决方案:

$ awk '
   BEGIN {FS=OFS="|"}
   !A[$1] {A[$1] = $0; next}
   {A[$1] = A[$1] "," $2}
   END {for(i in A) {print A[i]}
}' details.txt

【问题讨论】:

  • 使用 标签或 <pre> 包围您的代码。 <pre> 有时更容易。</pre></pre>
  • 什么版本的awk?在 gnu awk 3.1.5 上一切正常

标签: arrays awk grouping


【解决方案1】:

Solaris ...您可能需要运行“nawk”而不是“awk”。

【讨论】:

    【解决方案2】:

    在 solaris 中,使用 nawk 或 /usr/xpg4/bin/awk

    【讨论】:

      【解决方案3】:

      运行以下脚本即可得到结果:

      awk -F"\t" '{split($0,arr,"|");
          if(arr[1] in dic)  
          {
              dic[arr[1]]=dic[arr[1]]","arr[2];
          }
          else
          {
               dic[arr[1]]=arr[2];
          }
      }END{for(i in dic)print i"|"dic[i]}' in.log > "out.log"
      

      【讨论】:

        猜你喜欢
        • 2016-06-18
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 2019-12-01
        • 2017-11-01
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多