【发布时间】:2021-05-04 08:07:11
【问题描述】:
我有问题。这是我的脚本
#!/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中有什么好的解决方案吗?
【问题讨论】:
-
打印
inner+0, outer+0。 -
@MarkSetchell:将(空)字符串转换为整数。好主意。
-
@Cyrus 当然是从伟大的 Ed Morton 那里学来的 :-)
-
当然,你可以用
BEGIN{inner=outer=0}初始化你的变量。 -
@Mark 你几乎可以肯定只用一个简单的 awk 命令而不是运行一个排序和 2 个 uniqs 和一个 awk 的 shell 循环来做你想做的任何事情。如果您需要帮助,请使用几个示例
eq9_x4_$index.ndx输入文件和预期输出发布一个新问题。
标签: awk