【发布时间】:2020-05-13 02:55:39
【问题描述】:
我有 2 个文件,格式如下。我正在尝试比较第 1 列和第 2 列匹配的行,然后获取第 3 列中 2 # 的差异。
如果文件 2 的第 3 列大于文件 1 的第 3 列,我想在行尾加一个 +
如果 file2 列小于文件 1 第 3 列,我想在行尾添加 -
如果任一文件第 3 列为 0,我希望在行尾添加 *。
我只想打印两列之间差异大于 15% 的行
文件1
abc,1,472
abc,2,536
abc,3,652
abc,4,512
abc,5,474
abc,6,266
abc,7,520
def,1,954
def,9,538
def,10,136
def,11,341
def,12,183
def,13,1209
def,14,365
def,15,536
def,16,979
def,17,0
xyz,1,547
xyz,19,0
xyz,20,0
xyz,21,0
xyz,22,0
xyz,23,0
xyz,24,0
文件 2
abc,1,456
abc,2,533
abc,3,643
abc,4,444
abc,5,124
abc,6,255
abc,7,520
def,1,954
def,9,538
def,10,435
def,11,341
def,12,155
def,13,1209
def,14,365
def,15,536
def,16,979
def,17,0
xyz,1,547
xyz,19,124
xyz,20,0
xyz,21,0
xyz,22,0
xyz,23,0
xyz,24,0
预期输出
abc,5,474,124,74%,- // (474-124)/474 = 74%
def,10,136,435,31%,+. // (435-136)/474 = 69%
xyz,19,0,124,100%,*. // either file has 0 , print 100% and *
我已经尝试过多次迭代,但似乎无法使格式正常工作。
awk -F, 'FNR==NR{a[$1,$2]; next ;b[$1,$2,$3]; next} $1,$2 in a {if ($3>b[$3]) {Q=((b[$3]/$3) *100)) {print Q,$0 }} else if (b[$3]>$3) {Q=(($3/b[$3]) *100)){print Q,$0 }}' file1 file2
我收到此错误
^ 意外的换行符或字符串结尾
也尝试了这条线的变化,但我无法计算出除以 0 错误
awk -F, 'FNR==NR{a[$1,$2]; next ;b[$1,$2,$3]; next} $1,$2 in a {if ((Q=(b[$3]/$3) > 15) || (Q=($3/b[$3])) > 15 ){print Q,$0}}' file1 file2
awk: cmd. line:1: (FILENAME=file2 FNR=1) fatal: division by zero attempted
【问题讨论】:
-
the difference between the 2 columns is > 15%15% 什么? -
彼此,较低的#除以较高的#。 124/474 = 26%
-
谢谢,我认为我的数学错了,我认为这条线 abc,5,474,124,26%,- 应该是 abc,5,474,124,74%,- = 474-124 / 474 = 74%跨度>
标签: awk