Страница 1 из 1
про awk и shell-2 (вопрос с нуля)
Добавлено: 2010-05-17 2:57:03
Reiser
Есть один файлик, на который натравливается аwk и при выполнении строкой всяких хитрых условий выводятся некие поля этой строки.
Необходимо: при удовлетворении выше описанных условий, кроме некоторых полей вывести также из другого файла, адрес которого определяется через поле $x, строку с номером $y, где $y - также некое поле в первом файле.
файл1.txt -> awk -> $x и $y -> $x.txt -> awk 'if NR==$y' -> результат (строку) вывести, приконкатенировав её к выводу первого awk
Какой должен быть вывод - понятно?
Re: про awk и shell-2 (вопрос с нуля)
Добавлено: 2010-05-17 6:42:00
Reiser
Собственно, вопрос решился:
1.sh:
Код: Выделить всё
i=foo
j=bar
awk '{
print "test", "'`2.sh $i $j`'"
}' 1.txt
2.sh:
Код: Выделить всё
awk '{
printf NR $1
}' conservation/$1/$2/consurf.grades
Единственная проблема - NR и $1 получаются конкатенированны, любая попытка вставить пробел (" ") оканчивается ругательством в 1.sh. Как вставить?
Re: про awk и shell-2 (вопрос с нуля)
Добавлено: 2010-05-17 7:20:32
Reiser
Вопрос про передачу переменных внутри awk:
упорно даёт ABC, а не $1. Как передать позиционный параметр внутрь??
Re: про awk и shell-2 (вопрос с нуля)
Добавлено: 2010-05-17 13:58:25
Гость
Reiser писал(а):Единственная проблема - NR и $1 получаются конкатенированны, любая попытка вставить пробел (" ") оканчивается ругательством в 1.sh. Как вставить?
добавь двойные кавычки вокруг обратных
и лучше замени обратные кавычки `...` на $(...), их легче заметить и отличить от обычных одинарных кавычек '...'
ps, твои примеры не работают без напильника: используй BEGIN { blah...} вместо 1.txt и conservation/$1/$2/consurf.grades
Re: про awk и shell-2 (вопрос с нуля)
Добавлено: 2010-05-17 14:13:13
Гость
Reiser писал(а):упорно даёт ABC, а не $1. Как передать позиционный параметр внутрь??
никак, раскрытие строки (см. command substitution в sh(1)) происходит раньше, чем исполнение awk. А также переменные awk сами по себе не наследуются sh, так и наоборот. IIRC, в sh(1) переменные наследуются только в command substitution, при использовании export и внутри функций. К тому же в awk переменные окружения наследуются внутрь массива ENVIRON, чтобы не мешать собственным.
Код: Выделить всё
$ awk 'BEGIN { print ENVIRON["HOME"] }'
/home/blah
Re: про awk и shell-2 (вопрос с нуля)
Добавлено: 2010-05-17 14:16:01
Гость
более удачный пример
Код: Выделить всё
$ export z=ABC
$ awk 'BEGIN { print z }'
$ awk 'BEGIN { print ENVIRON["z"] }'
ABC
Re: про awk и shell-2 (вопрос с нуля)
Добавлено: 2010-07-08 16:00:36
vlad0201
Есть проблема! есть dbf и я его конвертирую в тхт, в этом dbfесть поле, и мне нужно из поля вырезать ненужные мне символы и переставить их в начало поля. Уже все мозги выкипели! HELP!!!!!!!