gpt4 book ai didi

linux - 如何在awk中找到模式并在另一个字段中进行操作?

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:20 24 4
gpt4 key购买 nike

我有一个文件,其中有 4 列由空格分隔,如下所示:

1_86500000 50 1_87500000 19
1_87500000 13 1_89500000 42
1_89500000 25 1_90500000 10
1_90500000 3 1_91500000 11
1_91500000 23 1_92500000 29
1_92500000 34 1_93500000 4
1_93500000 39 1_94500000 49
1_94500000 35 1_95500000 26
2_35500000 1 2_31500000 81
2_31500000 12 2_4150000 50

第一列和第三列不同相,所以我不能将一个的值除以另一个。由于只有两个或一个可能的列 $1 或 $3,解决方案是查找模式并将其值除以另一列或将其设置为 0,如果没有这样的预期结果显示:

附言此预期结果中的第二个字段只是说明性的,以显示该部门。

1_86500000 0/50 0
1_87500000 19/13 1.46154
1_89500000 42/25 1.68
1_90500000 10/3 3.333
1_91500000 11/23 0.47826
1_92500000 29/34 0.85294
1_93500000 4/39 0.10256
1_94500000 49/35 1.4
2_35500000 0/1 0
2_31500000 81/12 6.75
2_4150000 50/0 50

除此之外,我自己没有存档任何东西。所以我现在没有任何起点。

我尝试将与 _ 合并的字段分开,以查看是否可以通过减去坐标来匹配。如果我得到 0 则意味着列是同相且正确的。但我无法更进一步。

awk '{if( ($5-$2)==0) print $1,$2,$3,$4,$5,$6}' file

我试图匹配两列,但我只得到了分阶段的结果:

awk '{if(($1==$3)) print $1,$4/$2}' file

你能帮帮我吗?

最佳答案

awk 助您一臂之力!

$ awk '{d[$1]=$2; n[$3]=$4} 
END {for(k in n)
if(k in d) {print k,n[k]"/"d[k],n[k]/d[k]; delete d[k]}
else print k,n[k]"/0",n[k];
for(k in d) print k,"0/"d[k],0}' file | sort

1_86500000 0/50 0
1_87500000 19/13 1.46154
1_89500000 42/25 1.68
1_90500000 10/3 3.33333
1_91500000 11/23 0.478261
1_92500000 29/34 0.852941
1_93500000 4/39 0.102564
1_94500000 49/35 1.4
1_95500000 26/0 26
2_31500000 81/12 6.75
2_35500000 0/1 0
2_4150000 50/0 50

不过,您除以零的结果有点奇怪!

说明 为分子和分母保留两个数组。扫描文件后,遍历分子数组并找到相应的分母并进行除法。对于未使用的分母,应用给定的约定。

关于linux - 如何在awk中找到模式并在另一个字段中进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44161200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com