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