Bash shell脚本中的输出过滤

Bash shell脚本中的输出过滤,bash,shell,unix,awk,Bash,Shell,Unix,Awk,在我的脚本文件中 for file in *.TXT do echo "put $file" less $file | grep BPR | awk -F'CACH' {'print $1'} done 我正在运行这个命令less XYZ.TXT | grep BPR | awk-F'CACH'{'print$1'},我像这样输出 BPRC000000000008801 BPRC000000000006671 BPRP000000000005088 BPRC0000000000

在我的脚本文件中

for file in *.TXT
do
    echo "put $file"
    less $file | grep BPR | awk -F'CACH' {'print $1'}
done
我正在运行这个命令less XYZ.TXT | grep BPR | awk-F'CACH'{'print$1'},我像这样输出

BPRC000000000008801
BPRC000000000006671
BPRP000000000005088
BPRC000000000004542
BPRP000000000003805
BPRC000000000013624
BPRC000000000235668
根据这些输出,我需要计算每行的金额和总输出金额

比如说

BPRC000000000008801         88.01
BPRC000000000006671         66.71
BPRP000000000005088         50.88
BPRC000000000004542         45.42
BPRP000000000003805         38.05
BPRC000000000013624         136.24
BPRC000000000235668         2356.68
最终产量应为总产量。我怎样才能做到这一点。请帮助我。

尝试使用两个
sub()
函数。第一个删除所有字符直到非零数字。第二个加上小数点:

awk '
    BEGIN { OFS = "\t" } 
    { $2 = $1; 
      sub( /^[^0]*0*/, "", $2 ); 
      sub( /..$/, ".\&", $2 ); 
      print $0 
    }
' data
它产生:

BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
尝试使用两个
sub()
函数。第一个删除所有字符直到非零数字。第二个加上小数点:

awk '
    BEGIN { OFS = "\t" } 
    { $2 = $1; 
      sub( /^[^0]*0*/, "", $2 ); 
      sub( /..$/, ".\&", $2 ); 
      print $0 
    }
' data
它产生:

BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
尝试使用两个
sub()
函数。第一个删除所有字符直到非零数字。第二个加上小数点:

awk '
    BEGIN { OFS = "\t" } 
    { $2 = $1; 
      sub( /^[^0]*0*/, "", $2 ); 
      sub( /..$/, ".\&", $2 ); 
      print $0 
    }
' data
它产生:

BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
尝试使用两个
sub()
函数。第一个删除所有字符直到非零数字。第二个加上小数点:

awk '
    BEGIN { OFS = "\t" } 
    { $2 = $1; 
      sub( /^[^0]*0*/, "", $2 ); 
      sub( /..$/, ".\&", $2 ); 
      print $0 
    }
' data
它产生:

BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
请尝试以下操作:

awk -F'[A-Z]+' '{total += $2/100} END {printf "%.2f", total}' data
输入数据:

BPRC000000000008801
BPRC000000000006671
BPRP000000000005088
BPRC000000000004542
BPRP000000000003805
BPRC000000000013624
BPRC000000000235668
输出:

2781.99
BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
Total = 2781.99
如果您希望在每一步输出:

awk -F'[A-Z]+' '{printf "%s\t%.2f\n",$0, $2/100; total += $2/100} END {printf "Total = %.2f\n", total}' data
输出:

2781.99
BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
Total = 2781.99
请尝试以下操作:

awk -F'[A-Z]+' '{total += $2/100} END {printf "%.2f", total}' data
输入数据:

BPRC000000000008801
BPRC000000000006671
BPRP000000000005088
BPRC000000000004542
BPRP000000000003805
BPRC000000000013624
BPRC000000000235668
输出:

2781.99
BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
Total = 2781.99
如果您希望在每一步输出:

awk -F'[A-Z]+' '{printf "%s\t%.2f\n",$0, $2/100; total += $2/100} END {printf "Total = %.2f\n", total}' data
输出:

2781.99
BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
Total = 2781.99
请尝试以下操作:

awk -F'[A-Z]+' '{total += $2/100} END {printf "%.2f", total}' data
输入数据:

BPRC000000000008801
BPRC000000000006671
BPRP000000000005088
BPRC000000000004542
BPRP000000000003805
BPRC000000000013624
BPRC000000000235668
输出:

2781.99
BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
Total = 2781.99
如果您希望在每一步输出:

awk -F'[A-Z]+' '{printf "%s\t%.2f\n",$0, $2/100; total += $2/100} END {printf "Total = %.2f\n", total}' data
输出:

2781.99
BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
Total = 2781.99
请尝试以下操作:

awk -F'[A-Z]+' '{total += $2/100} END {printf "%.2f", total}' data
输入数据:

BPRC000000000008801
BPRC000000000006671
BPRP000000000005088
BPRC000000000004542
BPRP000000000003805
BPRC000000000013624
BPRC000000000235668
输出:

2781.99
BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
Total = 2781.99
如果您希望在每一步输出:

awk -F'[A-Z]+' '{printf "%s\t%.2f\n",$0, $2/100; total += $2/100} END {printf "Total = %.2f\n", total}' data
输出:

2781.99
BPRC000000000008801     88.01
BPRC000000000006671     66.71
BPRP000000000005088     50.88
BPRC000000000004542     45.42
BPRP000000000003805     38.05
BPRC000000000013624     136.24
BPRC000000000235668     2356.68
Total = 2781.99
而不是

awk -F'CACH' {'print $1'}


编辑:为了得到总数,比如

awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}{print $1, c/100}END{printf "%.2f", total}'
而不是

awk -F'CACH' {'print $1'}


编辑:为了得到总数,比如

awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}{print $1, c/100}END{printf "%.2f", total}'
而不是

awk -F'CACH' {'print $1'}


编辑:为了得到总数,比如

awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}{print $1, c/100}END{printf "%.2f", total}'
而不是

awk -F'CACH' {'print $1'}


编辑:为了得到总数,比如

awk -F'CACH' '{c=$1;sub(/[^0-9]*/,"",c);total+=c/100}{print $1, c/100}END{printf "%.2f", total}'


因此,给定一个
BPRC0….000NNNNMMMM
您需要一个带有
NNNNMM.MM
的列。我还需要通过添加所有NNNNMM.MM值来计算总数,这不是一个真正的解决方案,但是像这样的命令:
less XYZ.TXT | grep BPR | awk-F'CACH{'print$1'}
可以编写得更简单:
awk-F'CACH'/BPR/{print$1}'XYZ.TXT
。因此,给定一个
BPRC0…000NNNNMMMM
您需要一个列,其中包含
NNNNMM.MM
?是。我还需要通过添加所有NNNNMM.MM值来计算总数,这不是一个真正的解决方案,但是像这样的命令:
less XYZ.TXT | grep BPR | awk-F'CACH{'print$1'}
可以编写得更简单:
awk-F'CACH'/BPR/{print$1}'XYZ.TXT
。因此,给定一个
BPRC0…000NNNNMMMM
您需要一个列,其中包含
NNNNMM.MM
?是。我还需要通过添加所有NNNNMM.MM值来计算总数,这不是一个真正的解决方案,但是像这样的命令:
less XYZ.TXT | grep BPR | awk-F'CACH{'print$1'}
可以编写得更简单:
awk-F'CACH'/BPR/{print$1}'XYZ.TXT
。因此,给定一个
BPRC0…000NNNNMMMM
您需要一个列,其中包含
NNNNMM.MM
?是。我还需要通过添加所有NNNNMM.MM值来计算总数,这不是一个真正的解决方案,但是像这样的命令:
less XYZ.TXT | grep BPR | awk-F'CACH{'print$1'}
可以写得更简单:
awk-F'CACH'/BPR/{print$1}'XYZ.TXT
。因为您只需要将数字除以/100,前面的零就不用麻烦了,这也可以是:
gsub(/[A-Z]/,“”,$0);打印$0/100
@fedorqui:Yes。非常感谢。根据您的想法,可能会更快地执行
$2=$2/100
而不是第二个
sub()
。我只把它看作字符串,而不是数字。但是,嘿!我会像这些一样离开,所以其他答案已经用过了,这是另一种方法,当然不是最好的方法。因为你只需要将数字除以/100,前面的零就不用麻烦了,这也可以做到:
gsub(/[A-Z]/,“”,$0);打印$0/100
@fedorqui:Yes。非常感谢。根据您的想法,可能会更快地执行
$2=$2/100
而不是第二个
sub()
。我只把它看作字符串,而不是数字。但是,嘿!我会像这些一样离开,所以其他答案已经用过了,这是另一种方法,当然不是最好的方法。因为你只需要将数字除以/100,前面的零就不用麻烦了,这也可以做到:
gsub(/[A-Z]/,“”,$0);打印$0/100
@fedorqui:Yes。非常感谢。根据您的想法,可能会更快地执行
$2=$2/100
而不是第二个
sub()
。我只把它看作字符串,而不是数字。但是,嘿!我会像这些一样离开,所以其他答案已经用过了,这是另一种方法,当然不是最好的方法。因为你只需要将数字除以/100,前面的零就不用麻烦了,这也可以做到:
gsub(/[A-Z]/,“”,$0);打印$0/100
@fedorqui:Yes。非常感谢。根据您的想法,可能会更快地执行
$2=$2/100
而不是第二个
sub()
。我只把它看作字符串,而不是数字。但是,嘿!我会像这些一样离开,所以其他答案已经用过了,这是另一种方法,当然不是最好的方法。我已经尝试过了。但我得到的值是2.88315e+06。我有100多行BPR条目:(@Ricky检查我的编辑。你需要格式化的输出。使用
printf“%.2f”,total
而不仅仅是
print total
。在第二个命令中检查一步一步的输出。我已经尝试过了。但我得到的值是2.88315e+06。我有100多行BPR条目:(@Ricky检查我的编辑。你需要格式化的输出。使用
printf“%.2f”,total
而不仅仅是
print total
。在第二个命令中检查一步一步的输出。我已经尝试过了。但我得到的值是2.88315e+06。我有100多行BPR条目:(@Ricky检查我的编辑。你需要格式化输出。使用
printf“%.2f”,total
而不是