首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk -如何“重新awk”输出?

awk -如何“重新awk”输出?
EN

Stack Overflow用户
提问于 2012-04-30 19:05:14
回答 2查看 280关注 0票数 2

我需要获取一个文件并计算$7的出现次数--我已经用awk做到了这一点(因为我需要运行更多的awk)

我想要做的是将它合并到一个脚本中--到目前为止我已经

代码语言:javascript
复制
#! /usr/bin/awk -f
# get the filename, count the number of occurs
# <no occurs> <filename>
{ print $7 | "grep /datasheets/ | sort | uniq -c"}

如何获取输出并通过更多awk命令在同一文件中运行它

最终,我需要能够运行

代码语言:javascript
复制
./process.awk <filename> 

因此,它可以替代以前的设置,因为它需要花费太多的时间来更改-

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-30 19:54:05

如果您想将awk脚本的输出转发到另一个awk脚本,只需通过管道将其发送到awk。

代码语言:javascript
复制
awk 'foobar...' file|awk 'new awkcmd'

您当前的awk|grep|sort|uniq可以使用awk本身来完成。保存您的3个进程。你想重复计数,不是吗?

代码语言:javascript
复制
awk '$7~=/datasheets/{a[$7]++;} END{for(x in a)print x": "a[x]' file

应该行得通。

票数 3
EN

Stack Overflow用户

发布于 2012-07-09 06:02:07

如果您使用Gawk,您可以使用双向通信将数据推送到外部命令,然后将其读回:

代码语言:javascript
复制
#!/usr/bin/gawk -f

BEGIN {
  COMMAND = "sort | uniq -c"
  SEEN = 0
  PROCINFO[ COMMAND, "pty" ] = 1
}

/datasheets/ {
  print $7 |& COMMAND
  SEEN = 1
}

END {
  # Don't read sort output if no input was provided
  if ( SEEN == 1 ) {

    # Tell sort no more input data is available
    close( COMMAND, "to" )

    # Read the sorted data
    while( ( COMMAND |& getline SORTED ) > 0 ) {
      # Do whatever you want on the sorted data
      print SORTED
    }
    close( COMMAND, "from" )
  }
}

请参阅https://www.gnu.org/software/gawk/manual/gawk.html#Two_002dway-I_002fO

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10382631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档