从许多具有 2 列的文件中添加仅一列的每一行的值 - shell 脚本
Add the values of each line of only one column from many files with 2 columns - shell scripting
我有很多具有这种结构的文件,其中有两列数字。我想为我的所有文件添加第二列的每一行值,所以我最终只会得到一个文件。谁能帮忙?希望这个问题足够清楚。谢谢
假设您想要的是每个文件第二列所有值的总和,这对于 awk 来说似乎是一个足够简单的工作:
cat files | awk '{ sum += } END { print sum }'
以下内容基于 OP 在上面的评论中提供的信息:
- 我们有多个文件,我们必须对每个文件的第二列求和。据我们所知,我们可能有成百上千个不同的文件
- 每个文件中的第一列似乎并不重要,我将假设(基于 OP 样本数据)我们在每个输入文件中都有相同的(第一)列
基本思路是从一个空的摘要(文件 tot
)开始,paste
每个文件一个接一个 tot
并求和 2 和 4 列(如果存在) ) 到新 tot
文件的第二列。
换句话说...
$ touch tot ; for f in * ; do paste tot ${f} | awk '{ if ( NF > 3 ) { print , + } else { print , } }' > tmp ; mv tmp tot ; done
我确实用 8 个不同的文件对其进行了测试,并且似乎按预期工作。
当然 for f in *
必须更改才能捕获所有且仅捕获我们想要求和的文件。
我有很多具有这种结构的文件,其中有两列数字。我想为我的所有文件添加第二列的每一行值,所以我最终只会得到一个文件。谁能帮忙?希望这个问题足够清楚。谢谢
假设您想要的是每个文件第二列所有值的总和,这对于 awk 来说似乎是一个足够简单的工作:
cat files | awk '{ sum += } END { print sum }'
以下内容基于 OP 在上面的评论中提供的信息:
- 我们有多个文件,我们必须对每个文件的第二列求和。据我们所知,我们可能有成百上千个不同的文件
- 每个文件中的第一列似乎并不重要,我将假设(基于 OP 样本数据)我们在每个输入文件中都有相同的(第一)列
基本思路是从一个空的摘要(文件 tot
)开始,paste
每个文件一个接一个 tot
并求和 2 和 4 列(如果存在) ) 到新 tot
文件的第二列。
换句话说...
$ touch tot ; for f in * ; do paste tot ${f} | awk '{ if ( NF > 3 ) { print , + } else { print , } }' > tmp ; mv tmp tot ; done
我确实用 8 个不同的文件对其进行了测试,并且似乎按预期工作。
当然 for f in *
必须更改才能捕获所有且仅捕获我们想要求和的文件。