如何在bash中有效地汇总文件中的两列,其中包含270,000多行

Emi*_*mil 6 unix bash performance solaris

我在一个文件中有两列,我想自动对每行的两个值求和

例如

read write
5    6
read write
10   2
read write
23   44
Run Code Online (Sandbox Code Playgroud)

我想总结每行的"读"和"写".总结之后,我找到最大总和并将该最大值放在一个文件中.我觉得我必须使用grep -v来消除每行的列标题,这就像答案中所说的那样,使得代码效率低下,因为我只是为了读取一行而贪图整个文件.

我目前在一个bash脚本中(在一个for循环中,其中$ x是文件名)将这些列逐行求和

lines=`grep -v READ $x|wc -l | awk '{print $1}'`
line_num=1
arr_num=0


while [ $line_num -le $lines ]
do

    arr[$arr_num]=`grep -v READ $x |  sed $line_num'q;d' | awk '{print $2 + $3}'`
    echo $line_num
    line_num=$[$line_num+1]
    arr_num=$[$arr_num+1]

done
Run Code Online (Sandbox Code Playgroud)

但是,要汇总的文件有270,000多行.该脚本现在已经运行了几个小时,而且还没有完成.有没有更有效的方式来写这个,所以它不需要这么长时间?

Jua*_*doy 6

使用代替并利用模数函数:

awk '!(NR%2){print $1+$2}' infile
Run Code Online (Sandbox Code Playgroud)