2016-12-07 5 views
0

Я создал скрипт с помощью команды AWK, который гласит:Shell команды AWK с FS

myVar=$(awk -v FS="HAMMER=" 'NF>1{print $2}' TEST.properties) 
echo "Appliances="$myVar 

Файл TEST.properties содержит следующее:

... 
HAMMER=foo1,foo2 
JACKHAMMER=foo3 
... 

вышеуказанные команда возвращает

foo1,foo2 
foo3 

Как мне изменить команду, чтобы найти только HAMMER, а не каждое слово, содержащее HAMMER?

+1

Не используйте хаки, как установка строку поиска в качестве разделителя полей, используйте FS в качестве разделителя полей. Попробуйте 'awk -vFS =" = "'$ 1 ==" HAMMER "{print $ 2}' file' – 123

+0

Всегда ли ключ = значение? и 'HAMMER' происходят в ключе? – nu11p01n73R

+0

Да ключ = значение. Молот является ключевым. Спасибо за совет! –

ответ

1

Используйте начало строки ^ в вашем поле сепаратора FS:

awk -v FS="^HAMMER=" 'NF>1{print $2}' 

Но если у вас есть ключ строительство = значение, то вам лучше использовать:

awk -v FS='[=,]' '$1=="HAMMER"{for(i=2;i<=NF;i++} print $i}' 

Разделитель полей либо =, либо ,. Если первым параметром является ваше ключевое слово, напечатайте все остальные параметры этой строки.

+0

Когда я заменяю HAMMER переменной, я не получаю значение переменной в команде. Ex. awk -v FS = '[=,]' '$ 1 == "$ {SOMEVAR}" {для (i = 2; i <= NF; i ++) print $ i}' –

+0

Это следствие одиночного кавычки awk-скрипта , Вы можете добавить еще один параметр '-v var =" $ SOMEVAR "' и изменить скрипт на '$ 1 == var {...}' – oliv

+0

вот так? awk -v var = "$ SOMEVAR" FS = '[=,]' '$ 1 == var {for (i = 2; i <= NF; i ++) print $ i}' –

0

либо:

awk -F'=' '$1=="HAMMER"{print $2}' file 

или:

grep -oP '(?<=^HAMMER=).*' file 
Смежные вопросы