Eng*_*ng7 9 awk text-processing gawk
考虑以下文件:
file1:
boo,8,1024
foo,7,2048
Run Code Online (Sandbox Code Playgroud)
file2:
foo,0,24,154
noo,0,10,561
Run Code Online (Sandbox Code Playgroud)
file3:
24,154,7,1024,0
Run Code Online (Sandbox Code Playgroud)
我需要的是去File1并检查是否$2==7;如果为真,取$1,$2和$3来自File1 ; 现在我必须比较$1来自File1 是否等于$1来自File2;如果为真,我必须从File1中不存在的File2取$3和,然后我必须转到File3并检查from File3是否等于from File2,以及from File3等于from File2;如果是,那么我必须检查是否来自File1$4$1$3$2$4$2等于$3from File3,那么如果这个条件为真,我必须比较$3from File1和$4from File3,如果$3from File1大于$4from File3。
我尝试了以下脚本:
cat [file1] [file2] [file3] |
awk -F,
'{if(NF==3)
{if($2==7){a[$1]=$1; b[$1]=$2; c[$1]=$3}
}else
{if(NF==4){if(a[$1]==$1){d[$3]=$3; e[$4]=$4}
}else
{if(NF==5){if(d[$1]==$1 && e[$2]==$2){print a[$1], b[$1], c[$1], d[$1]}}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
foo,7,2048,24,154,1024
Run Code Online (Sandbox Code Playgroud)
这对我有用:
awk -F, 'FNR==1{++f} \
f==1 && $2==7 {a1[$1]++; a2[$2]=$3; o=$0} \
f==2 && a1[$1] {o=o","$3","$4; a3[$3]=$4} \
f==3 && a3[$1] && $2==a3[$1] && a2[$3] && $4<a2[$3] {print o}' \
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
说明:
FNR==1{++f}) 增加文件索引,以便稍后确定我们在哪个文件中 1-3。$2等于7
a1使用$1作为索引a2、$2作为索引和$3作为值填充数组o用前 3 个字段写下变量(输出)$1of file2equals $1of file1(以前写在a1)
$3和附加$4到输出变量o。a3用$3as 索引和$4as 值填充数组。$1等于 file2s $3(索引a3)$2等于 file2s $4(的值a3)$3等于 file1s $2(索引a2)$4低于 file1s $3(的值a2)o。