【问题标题】:how to extract data from trace files using awk and xxd如何使用 awk 和 xxd 从跟踪文件中提取数据
【发布时间】:2014-07-28 03:26:16
【问题描述】:

我正在尝试从跟踪文件中提取数据并计算总和。对于单个文件,以下命令有效:

   cat avg.txt| gawk '{T+=$1} END {print T "\n"}'

但是当我尝试将它与 xargs 命令一起使用时,因为我必须对多个文件执行相同的操作,所以出现语法错误。

     ls *avg* |  xargs -i sh -c " cat {} | gawk '{T+=$1} END {print T "\n"}'"

gawk: {T+=} END {print T n}

gawk: ^ 语法错误

谁能告诉我是什么问题?

【问题讨论】:

  • 将您的 sh 调用更改为 sh -vxc "...,这样您就可以看到 shell 正在处理它。另外,逃避你的 awk \$1。祝你好运。

标签: gawk xargs


【解决方案1】:

xargs 增加了很多复杂性:

for file in *avg*; do
    gawk '{T+=$1} END {print FILENAME ": "T}' "$file"
done

您的代码的主要问题是外部双引号允许 $1 扩展为 shell 变量。

【讨论】:

  • 但是,如果我们想要运行数千个文件,xargs -P8 会有所帮助,但是总数会分布在awk 的多次调用中。那么管道到bc 是唯一的选择吗?
【解决方案2】:

使用 GNU Parallel,您可以这样做:

sum() {
  gawk '{T+=$1} END {print FILENAME ": "T}' $1
}
export -f sum
parallel sum ::: *avg*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 2019-07-31
    • 1970-01-01
    • 2015-12-21
    • 2012-08-18
    • 2016-08-08
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多