grep несколько шаблонов шаблонов из нескольких файлов и напечатайте первое совпадение [закрыто]

-1
01.03.2017, 12:22
3 ответа

Если файлы не слишком большие:

zgrep -f number_list.csv {voice,sms,data}*20170301*gz  | 
   awk -F'|' '{print $22}' | sort -u
0
28.01.2020, 05:07

В grep использование переключателя -m позволяет остановить чтение файла после X строк. Например, grep -m 2 остановится после нахождения 2 совпадений. В вашем случае вы должны использовать grep -m 1, чтобы остановиться после первого совпадения. Команда grep, которая находит совпадение, вернет успешный код выхода, в то время как команда grep, которая не обнаружит совпадений, с ненулевым значением. Вы можете использовать блоки if / then / elif / fi или [[test]], чтобы предотвратить выполнение последних команд grep, если первый grep возвращает результат успешно.

TEMP=`zgrep -m 1 -f number_list.csv voice*20170301*gz`
[[ "$TEMP" ]] || TEMP=`zgrep -m 1 -f number_list.csv sms*20170301*gz`
[[ "$TEMP" ]] || TEMP=`zgrep -m 1 -f number_list.csv data*20170301*gz`
echo "$TEMP" | awk -F "|" '{print $22}' >> register_20170301.csv
2
28.01.2020, 05:07
while read phone_number
do
    for file in data*20170301*gz
    do 
        zgrep -q "${phone_number}" "${file}"
        if [ "$?" -eq "0" ]
        then
             zgrep -q "${phone_number}" ${file} >> register_20170301.csv
             break;
        fi
    done
done < number_list.csv
2
28.01.2020, 05:07

Теги

Похожие вопросы