awk Sum列,并将结果放入一个文件中 我想要第二列的总和 并将结果放入f4

awk Sum列,并将结果放入一个文件中 我想要第二列的总和 并将结果放入f4,awk,Awk,我使用了这个命令 1 21 30 35 如何添加和其他文件请尝试以下内容 awk '{sum+=$1;}END{print sum;}' f1>f4 解释:为上述代码添加解释 awk ' FNR==1{ if(sum){ total_sum=(total_sum?total_sum",":"")sum } sum="" header=(header?header",":"")FILENAME } { sum+=$2 } END{ print header

我使用了这个命令

1 21 30 35

如何添加和其他文件

请尝试以下内容

awk '{sum+=$1;}END{print sum;}' f1>f4
解释:为上述代码添加解释

awk '
FNR==1{
  if(sum){
    total_sum=(total_sum?total_sum",":"")sum
  }
  sum=""
  header=(header?header",":"")FILENAME
}
{
  sum+=$2
}
END{
  print header ORS total_sum","sum
}
'  file* > file4
输出如下

awk '                                                  ##Starting awk program from here.
FNR==1{                                                ##checking condition FNR==1 which will be TRUE when first line being read.
  if(sum){                                             ##Checking condition if variable sum is NOT NULL then do following.
    total_sum=(total_sum?total_sum",":"")sum           ##Creating variable total_sum  whose value is keep concatenating variable sum value in it.
  }                                                    ##Closing BLOCK for if condition here.
  sum=""                                               ##Nullifying variable sum here.
  header=(header?header",":"")FILENAME                 ##Creating a variable header whose value is keep concatenating awk variable FILENAME value each time cursor here.
}                                                      ##Closing BLOCK for FNR==1 condition here.
{
  sum+=$2                                              ##Creating variable sum whose value is keep adding to $2 value of each Input_file when Input_file is being read.
}
END{                                                   ##Starting END section of this awk code from here.
  print header ORS total_sum","sum                     ##Printing variable header ORS(New line) variable total_sum comma and sum value then.
}
'  file*                                               ##Mentioning Input_file names here.
输出:

awk '{ f[FILENAME]+=$2; }
  END{ for (i in f) { h=sprintf("%s%s%s",h,sep,i); 
                      d=sprintf("%s%s%s",d,sep,f[i]); sep="," }; 
       print h; print d}' f1 f2 f3 > f4

变量
FILENAME
具有当前读取的文件名的值(用于输入)。

欢迎使用SO,感谢您在问题中添加您的努力。请编辑您的问题,并在代码标签中添加更清晰的文件和输出示例,然后让我们知道。您能告诉我们结果中的1来自1213035吗?或者这只是一个行号…?在示例输入/输出中包含一个空文件。请给我任何代码int以便将所有结果放在一个中file@Ahmed,您的示例输出不清楚,请用正确的示例编辑您的问题并让我们知道,谢谢。@Ahmed,请检查我刚刚编辑的最新代码,然后让我知道。它给了我所显示的输出。@oguzismail,OP在提问中加入了他的努力,并尽力解释(作为一名新加入者),所以我想回答。好吧。谢谢老兄,我受宠若惊
awk '                                                  ##Starting awk program from here.
FNR==1{                                                ##checking condition FNR==1 which will be TRUE when first line being read.
  if(sum){                                             ##Checking condition if variable sum is NOT NULL then do following.
    total_sum=(total_sum?total_sum",":"")sum           ##Creating variable total_sum  whose value is keep concatenating variable sum value in it.
  }                                                    ##Closing BLOCK for if condition here.
  sum=""                                               ##Nullifying variable sum here.
  header=(header?header",":"")FILENAME                 ##Creating a variable header whose value is keep concatenating awk variable FILENAME value each time cursor here.
}                                                      ##Closing BLOCK for FNR==1 condition here.
{
  sum+=$2                                              ##Creating variable sum whose value is keep adding to $2 value of each Input_file when Input_file is being read.
}
END{                                                   ##Starting END section of this awk code from here.
  print header ORS total_sum","sum                     ##Printing variable header ORS(New line) variable total_sum comma and sum value then.
}
'  file*                                               ##Mentioning Input_file names here.
file1,file2,file3
21,30,35
awk '{ f[FILENAME]+=$2; }
  END{ for (i in f) { h=sprintf("%s%s%s",h,sep,i); 
                      d=sprintf("%s%s%s",d,sep,f[i]); sep="," }; 
       print h; print d}' f1 f2 f3 > f4
$ cat f4
f1,f2,f3
21,30,35