У меня есть текстовый файл, который я хочу отфильтровать использование awk. Текстовый файл похож на это:
foo 1
bar 2
bar 0.3
bar 100
qux 1033
Я хочу отфильтровать те файлы с 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 '$2>0 && $1==$col1type' $input
Но так или иначе это перестало работать. Что правильный путь состоит в том, чтобы сделать это?
Вам нужны двойные кавычки, чтобы разрешить интерполяцию переменных, что означает, что вам нужно экранировать другие знаки доллара с помощью обратной косой черты, поэтому $ 1
и $ 2
не интерполируются. Также вам нужны двойные кавычки вокруг "$ col1type"
.
awk "\$2>0 && \$1==\"$col1type\""
передать его, используя параметр -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
Одиночные кавычки запрещают расширение переменных в bash:
awk '$2>0 && $1=='"$col1type"