而不是在awk中打印零

而不是在awk中打印零,awk,Awk,我有个问题。这是我的剧本 #!/bin/bash for index in {1..100} # I do this script on 100 files, that is s why I use for loop do sort -k2,2 -k1,1 eq9_x4_$index.ndx | uniq -c | uniq -f2 -c | awk ' ($1==1 && $2==4) {in

我有个问题。这是我的剧本

#!/bin/bash
for index in {1..100} # I do this script on 100 files, that is s why I use for loop
do
    sort -k2,2 -k1,1 eq9_x4_$index.ndx | 
    uniq -c             | 
    uniq -f2 -c         | 
    awk '
    ($1==1 && $2==4) {inner+=6} 
    ($1==2 && $2==1) {inner+=3; outer+=3} 
    ($1==2 && $2==2) {inner+=2; outer+=4} 
    ($1==3 && $2==1) {inner+=1; outer+=5} 
    ($1==4 && $2==1) {outer+=6} 
    END{print inner, outer}' >> inner_outer_water_bridges_x4.txt
done
它计算水桥和打印总和(内部和外部) 这是我输出文件的一部分,而不是

9 15
2 16

8 10
4 14
 6
5 25
2 10
6 
我想要这个

9 15
2 16
0 0
8 10
4 14
0 6
5 25
2 10
6 0

如何做到这一点在awk中有好的解决方案吗?

使用三元运算符尝试以下操作。无法测试它,因为这里只提供了代码示例

#!/bin/bash
for index in {1..100} # I do this script on 100 files, that is s why I use for loop
do
    sort -k2,2 -k1,1 eq9_x4_$index.ndx | 
    uniq -c             | 
    uniq -f2 -c         | 
    awk '
    ($1==1 && $2==4) {inner+=6} 
    ($1==2 && $2==1) {inner+=3; outer+=3} 
    ($1==2 && $2==2) {inner+=2; outer+=4} 
    ($1==3 && $2==1) {inner+=1; outer+=5} 
    ($1==4 && $2==1) {outer+=6} 
    END{print (inner?inner:0), (outer?outer:0)}' >> inner_outer_water_bridges_x4.txt
done

使用三元运算符尝试以下操作。无法测试它,因为这里只提供了代码示例

#!/bin/bash
for index in {1..100} # I do this script on 100 files, that is s why I use for loop
do
    sort -k2,2 -k1,1 eq9_x4_$index.ndx | 
    uniq -c             | 
    uniq -f2 -c         | 
    awk '
    ($1==1 && $2==4) {inner+=6} 
    ($1==2 && $2==1) {inner+=3; outer+=3} 
    ($1==2 && $2==2) {inner+=2; outer+=4} 
    ($1==3 && $2==1) {inner+=1; outer+=5} 
    ($1==4 && $2==1) {outer+=6} 
    END{print (inner?inner:0), (outer?outer:0)}' >> inner_outer_water_bridges_x4.txt
done

如果您只处理整数,您可以按照以下方式利用
printf

END{printf "%d %d\n", inner, outer}

(在GNU Awk 5.0.1中测试)

如果您只处理整数,您可以按照以下方式使用
printf

END{printf "%d %d\n", inner, outer}

(在GNU Awk 5.0.1中测试)

打印
内部+0,外部+0
@MarkSetchell:cast(空)字符串为整数。好主意。@Cyrus是从伟大的Ed Morton那里学到的:-)当然,你可以用
BEGIN{internal=outer=0}
@Mark初始化你的变量。你几乎可以肯定,只要一个简单的awk命令,而不是一个运行sort、2个uniq和一个awk的shell循环,你就可以做任何你想做的事情。发布一个新问题,其中包含两个示例
eq9_x4_$index.ndx
输入文件和预期输出(如果需要帮助)。打印
internal+0,outer+0
@MarkSetchell:cast(empty)string to integer。好主意。@Cyrus是从伟大的Ed Morton那里学到的:-)当然,你可以用
BEGIN{internal=outer=0}
@Mark初始化你的变量。你几乎可以肯定,只要一个简单的awk命令,而不是一个运行sort、2个uniq和一个awk的shell循环,你就可以做任何你想做的事情。发布一个新问题,其中包含两个示例
eq9_x4_$index.ndx
输入文件和预期输出(如果需要帮助)。