Как передать строку в качестве параметра в AWK в скрипте Bash - PullRequest
4 голосов
/ 16 марта 2010

У меня есть текстовый файл, который я хочу отфильтровать используя awk. Текстовый файл выглядит так:

foo 1
bar 2
bar 0.3
bar 100
qux 1033

Я хочу отфильтровать эти файлы с помощью awk внутри скрипта bash.

#!/bin/bash

#input file
input=myfile.txt

# I need to pass this as parameter
# cos later I want to make it more general like
# coltype=$1
col1type="foo"   

#Filters
awk '$2>0 && $1==$col1type' $input

Но как-то не получилось. Как правильно это сделать?

Ответы [ 4 ]

10 голосов
/ 16 марта 2010

передать его, используя -v параметр awk. таким образом, вы отделяете переменные awk и переменные оболочки. Его аккуратнее и без лишних кавычек.

#!/bin/bash

#input file
input=myfile.txt

# I need to pass this as parameter
# cos later I want to make it more general like
# coltype=$1
col1type="foo"   

#Filters
awk -vcoltype="$col1type" '$2>0 && $1==col1type' $input
5 голосов
/ 17 ноября 2011

"двойная кавычка одинарная кавычка"

awk '{print "'$1'"}'


пример:

$./a.sh arg1 
arg1


$cat a.sh 
echo "test" | awk '{print "'$1'"}'


Linux протестирован

4 голосов
/ 16 марта 2010

Вам нужны двойные кавычки, чтобы разрешить переменную интерполяцию, а это значит, что вам нужно экранировать другие знаки доллара с обратной косой чертой, чтобы $1 и $2 были , а не интерполированными. Также вам нужны двойные кавычки вокруг "$col1type".

awk "\$2>0 && \$1==\"$col1type\"" 
2 голосов
/ 16 марта 2010

Одинарные кавычки запрещают расширение переменной в bash:

awk '$2>0 && $1=='"$col1type"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...