首页 > 解决方案 > 如何在多个文件上使用 awk?

问题描述

我正在使用 Linux。我写了一些看起来像这样的代码:

for x in {10..20}:{00..59}; do awk -F';' '/'"$x"'/ {y+=$7} END {print y}' Data26092019; done

如何在多个文件上使用此命令,例如:Data26092019 和 Data27092019?

文件是这样的:

09:55:13;ACSEL;4.850;16;77.60;1;1
09:55:13;ACSEL;4.850;40;194.00;2;1
09:55:13;ACSEL;4.850;465;2255.25;3;1
...

输出示例:

Data26092019 4988 10:00
Data26092019 2778 10:01
...
Data27092019 3252 10:00
Data27092019 3002 10:01

也许它应该与另一个 for 循环一起使用,或者您可以指定文件。

主要命令是:

for x in {10..20}:{00..59}; do awk -F';' '/'"$x"'/ {y+=$7} END {print y}' Data26092019; done

它必须在Data26092019和上执行Data27092019

标签: linuxshellawktext-processing

解决方案


编辑:如果您想使用END(或没有 GNUawk)+您希望 sum 与您传递 Input_files 的顺序相同,请尝试以下操作。

使用END

awk '
BEGIN{
 FS=";"
}
!filename[FILENAME]++{
  a[++count]=FILENAME
}
{
  sum[FILENAME]+=$7
}
END{
  for(i=1;i<=count;i++){
    print "Sum of minute for file: " a[i] " is: " sum[a[i]]
  }
}'  Data26092019 Data27092019


使用ENDFILE

您能否尝试以下,未测试,因为 OP 没有提供样本。需要 GNU awk

awk 'BEGIN{FS=";"} {sum+=$7} ENDFILE{print "Sum of minute for file: " FILENAME " is: " sum;sum=""}' Data26092019 Data27092019

推荐阅读