ram="rambo"
ram1="rimbo"
awk -v ram=$ram -v ram1=$ram1 '{ for (i=1;i<=length(ram);i++) { if (substr(ram,i,1) != substr(ram1,i,1)) { count++ } }} END { print (count/length(ram)*100"% difference") }' <<< ""
выход:
20% difference
В приведенном выше примере предполагалось, что обе переменные ram и ram1 всегда имеют одинаковую длину. Мы передаем обе переменные в awk и сравниваем каждый символ один за другим с одним в другой строке, отслеживая различия с помощью переменной count.
В конце мы вычисляем процентную долю отличающейся строки.
Правильный синтаксис:awk '-F[|]' '{ print $2 }'
|
является специальным символом оболочки , поэтому его необходимо заключать в кавычки, чтобы оболочка не пыталась создать конвейер.
Но |
также является специальным символом awk , используемым для разделения альтернативных шаблонов в регулярном выражении. Лучший способ процитировать это — сделать его диапазоном, состоящим из одного символа, как [|]
. Опция -F устанавливает переменную awk FS (Разделитель полей ), которая используется как регулярное выражение (RE, шаблон ).
Тогда все это нужно заключить в кавычки, потому что [..]
также может быть специальным символом оболочки, который расширяет имена файлов.
'$2\n'
— действующая awk-программа, но она не делает того, что вы ожидаете. Он находится в положении паттерна без действия. Таким образом, если $2 не -пусто, шаблон имеет значение True, и печатается вся строка.
Вам нужно действие, что и делает { }
, и вы хотите выбрать только одно поле и напечатать его. Он не нуждается в новой строке. --print делает это автоматически.