LINUX.ORG.RU
решено ФорумAdmin

awk экранирование переменной в условии

 , ,


0

1

Привет ЛОР!

Необходимо из условия в awk экранировать переменную (search), на «\» ругается, если вместо переменной поставить дату ( к примеру 27.06.17 ) То спокойно на вывод идет.


#!/bin/bash
echo 'enter the date (example 27.06.17)':
read search
echo 'enter the file (example Plat_full.csv)':
read file

cd /var/www/storage/import_mnt &&

grep -i «$search» Plat_full.csv | awk -F"|" '{if ($9 == "$search") print $0;}' > ../import/1.csv

exit 0



Последнее исправление: sanekmihailow (всего исправлений: 1)
Ответ на: комментарий от aureliano15

он хочет вводить разные запросы поиска

$ echo -e "111\n222\n333" | (QUERY=222; awk -vQ=$QUERY '$1==Q {print}')
222
$
/thread
не благодари

anonymous
()
Ответ на: комментарий от aureliano15

он должен в 1.csv файл выложить выборку платежей за введенную дату ( такого формата)

NN|GUID|GUIDКонтрагента|GUIDДоговора|Полный код договора | Код контрагента | Код Договора | Вид документа| Дата документа | Номер документа | Дата Договора | Номер договора | Сумма | ФИО контрагента | Тип (Приход/Расход)| Назначение

1|rOj0j0j0j0j0jjjjjj11203jjjj114219jjj|rm9704093372|Bj0j0j112j0j0jjjjjj10525jjj|00000024/0000244/000001|00000024/0000244|000001|РКО|29.03.13|mf/00186|29.03.13|Договор займа 579 от 29.03.2013 г.|5000|Ёмкина Надежда Владимировна|Расход|

2|pOj0j0j0j0j0jjjjjjjj276jjjj117734jjj|rm9704093372|Bj0j0j112j0j0jjjjjj10525jjj|00000024/0000244/000001|00000024/0000244|000001|ПКО|30.04.13|mf/00542|29.03.13|Договор займа 579 от 29.03.2013 г.|25|Ёмкина Надежда Владимировна|Приход|76.2

Если я вместо $search поставлю 30.04.13 , то он найдет грепом проверит столбец awk-ом и если совпадет то положит в /import/1.csv

sanekmihailow
() автор топика
Ответ на: комментарий от sanekmihailow

Понял. Это то, что написал анонимус. Можно ещё без опции -v подставить переменную из оболочки в awk таким способом:

awk -F"|" '{if ($9 == '"$search"') print $0;}'

Здесь одинарные кавычки закрываются перед «$search» и снова открываются после, благодаря чему shell вместо подстроки «$search» подставляет её значение. Но вариант анонимуса

awk -F"|" -v s="$search" '{if ($9 == s) print $0;}'

проще и нагляднее (меньше путаницы с кавычками).

aureliano15 ★★
()
Ответ на: комментарий от sanekmihailow

Говори спасибо анонимусу, это он первым предложил. Или ты их огнорируешь?

aureliano15 ★★
()
Ответ на: комментарий от sanekmihailow

Между прочим, aureliano15-а надо поблагодарить за кавычки у -v var=«val», а у вас совсем не понятно, зачем grep в примере. Ибо кроме как тормозить оно ничего другого полезного не даст.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Согласен, awk и сам прекрасно все делает, писал скрипт на скорую руку, долго не думал.

sanekmihailow
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.