我的字符串应与十进制数相匹配。
例如,
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}'),但我不知道如何制作字符串对应数字,然后求和。我应该使用正则表达式并替换?
答案 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