У меня есть строки, которые должны совпадать с числами.
Например,
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
Вот как я это сделал:
Поместите строки в числовые строки в собственный файл и проанализируйте его. Манипулируйте 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