我正在尝试从跟踪文件中提取数据并计算总和。对于单个文件,以下命令有效:
cat avg.txt| gawk '{T+=$1} END {print T "\n"}'
但是当我尝试将它与xargs命令一起使用时,由于我必须对多个fils执行相同的操作,因此出现语法错误。
ls *avg* | xargs -i sh -c " cat {} | gawk '{T+=$1} END {print T "\n"}'"
gawk:{T + =} END {print T n}
gawk:^语法错误
有人可以告诉我这是什么问题吗?
答案 0 :(得分:0)
xargs增加了很多复杂性:
for file in *avg*; do
gawk '{T+=$1} END {print FILENAME ": "T}' "$file"
done
您的代码的主要问题是外部双引号,允许$1
扩展为shell变量。
答案 1 :(得分:0)
使用GNU Parallel,您可以这样做:
sum() {
gawk '{T+=$1} END {print FILENAME ": "T}' $1
}
export -f sum
parallel sum ::: *avg*