awk:用字符串代替小数和求和

时间:2015-03-05 06:45:11

标签: awk

我的字符串应与十进制数相匹配。

例如,

one is equal to 1
too 2
hello 4
pots 16

他们被' - '分开。这些是唯一使用的,所以

one-one sums to 2
One-oNe sums to 2
one-one-too-one sums to 5

不区分大小写!

现在,我有一个用列分隔列的文件;我想写一个awk表达式来检查第一列$ 1的SUM是否等于$ 2

以下是文件结构的示例

oNe-oNE ; 2
one-too ; 1

这是所需的输出

oNe-oNE ; 2 ; match
one-two ; 1 ; not

我知道如何在awk的列中对数字求和(例如:awk' {sum + = $ 1} END {print sum}'),但我不知道如何制作字符串对应数字,然后求和。我应该使用正则表达式并替换?

1 个答案:

答案 0 :(得分:1)

这是一个awk解决方案:

cat key
one 1
too 2
hello 4
pots 16

cat file
oNe-oNE ; 2
one-too ; 1

awk 'FNR==NR {a[$1]=$2;next} {split($1,b,"-");f=tolower(b[1]);s=tolower(b[2]);print $0,"; "(a[f]+a[s]==$3?"match":"not")}' key file
oNe-oNE ; 2 ; match
one-too ; 1 ; not

key个文件夹添加到awk

awk 'BEGIN{n=split("one 1 too 2 hello 4 pots 16",b," ");for (i=1;i<n;i+=2) a[b[i]]=b[i+1]} {split($1,c,"-");f=tolower(c[1]);s=tolower(c[2]);print $0,"; "(a[f]+a[s]==$3?"match":"not")}' file
oNe-oNE ; 2 ; match
one-too ; 1 ; not