2015-07-01 2 views
0

У меня есть следующий код Баш:AWK входной переменной

md5sum -c checksum.md5 2>&1 | grep FAILED | awk '{print $1}' | sed 's/:$// > /tmp/check.tmp 
awk '{system("wget http://example.com/"$1"")}' /tmp/check.tmp 

Как я могу использовать AWK без временного файла?

Что-то вроде

files=`md5sum -c checksum.md5 2>&1 | grep FAILED | awk '{print $1}' | sed 's/:$//` 
awk '{system("wget http://example.com/"$1"")}' $files 
+0

Почтовый ввод и вывод, он может почти деинфинтетировать все в awk. – 123

+0

Трубопровод 'sed'' 'awk' не работает? Однако задачи, выполняемые 'grep' и' sed' здесь, скорее всего, будут выполняться с помощью 'awk'. – Melebius

ответ

1

Как это:

awk '{system("wget http://example.com/"$1"")}' <<< $files 
+0

Спасибо! Это оно! –

2

Вы можете упростить всю команду к следующему:

md5sum -c checksum.md5 2>&1 |\ 
    awk -F'[:/]' '/FAILED/{system("wget http://example.com/"$(NF-1))}' 
+0

Спасибо! Это здорово, но немного сложно –

+1

Вам не хватает котировок закрытия. – 123

+0

@ User112638726 Спасибо, добавили. Решение также будет работать только до тех пор, пока имена файлов не содержат ':,;, $,(), {}', пробелы, табуляции или новые строки. Я уже не очень доволен этим, но вы видите, это уже слишком сложно *. ;) – hek2mgl

2

wget имеет переключатель -i, который может пригодиться:

md5sum -c checksum.md5 2>&1 | \ 
    sed -n '/FAILED$/ { s/: FAILED$//; s!^!http://example.com/!; p; }' | \ 
    wget -i 
Смежные вопросы