而不是在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
输入文件和预期输出(如果需要帮助)。