awk: сопоставление строк с десятичными значениями и их суммирование

У меня есть строки, которые должны совпадать с числами.

Например,

one is equal to 1

Теперь у меня есть файл, который разделяет столбцы; и я хочу написать выражение awk, которое проверяет, является ли SUM первого столбца $ 1 равным $ 2.

Вот пример того, как файл структурирован

oNe-oNE ; 2
one-too ; 1

РЕШЕНИЕ [нуждается в улучшении] У меня есть работа с двумя аргументами для строки, как один, но мне нужно адаптировать ее, чтобы принимать больше, например One-TOO-pot-one-one (без ограничений). [!d4 ]

awk 'BEGIN{n=split("one 1 too 2 hello",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
1
задан 6 March 2015 в 01:25

1 ответ

Вот как я это сделал:

Поместите строки в числовые строки в собственный файл и проанализируйте его. Манипулируйте FS, чтобы облегчить разбор CSV-файла.

Один из способов достижения этого:

sum.awk

FNR==NR { h[$1] = $NF; next }
FNR==1  { FS=" *[-;] *"     }
{ print $0 " ; " (h[tolower($1)] + h[tolower($2)] == $3 ? "match" : "not") }

Запустить его следующим образом:

awk -f sum.awk string-to-number.txt csv.txt

Выход:

oNe-oNE ; 2 ; match
one-too ; 1 ; not
0
ответ дан 23 May 2018 в 22:40

Другие вопросы по тегам:

Похожие вопросы: