Как использовать строку, которая читает из файла в команде grep - PullRequest
0 голосов
/ 13 февраля 2019

Извините за мой плохой английский, сначала.Я хочу прочитать файл (tel.txt), который содержит много номеров телефонов (число в строке) и использовать эту строку для команды grep для поиска определенного номера в исходном файле (другом файле)!

Я написал этот код:

dir="/home/mujan/Desktop/data/ADSL_CDR_Text_Parts_A"
file="$dir/tel.txt"
datafile="$dir/ADSL_CDR_Like_Tct4_From_960501_to_97501_Part0.txt"

while IFS= read -r line
do
    current="$line"
    echo `grep -F $current "$datafile" >> output.txt`
done < $file

пример файла tel:

44001547
44001478
55421487

, но этот код ничего не возвращает!когда я объявляю переменную 'current' с литералами, она работает правильно!что случилось?!

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Почему бы вам не выполнить поиск строки напрямую?Я провел несколько тестов, этот скрипт работает на моем linux (CentOS 7.x) с оболочкой bash:

#!/bin/bash
file="/home/mujan/Desktop/data/ADSL_CDR_Text_Parts_A/tel.txt"

while IFS= read -r line
do
    echo `grep "$line" /home/mujan/Desktop/data/ADSL_CDR_Text_Parts_A/ADSL_CDR_Like_Tct4_From_960501_to_97501_Part0.tx >> output.txt`
done < $file

Дайте ему попытку ... Он ничего не показывает на экране, так как вы перенаправляетевывод в файл output.txt, поэтому результаты сопоставления сохраняются там.

0 голосов
/ 14 февраля 2019

Вы должны использовать файловые дескрипторы при чтении с использованием цикла while.instead для цикла loop, чтобы избежать ложных перенаправлений

dir="/home/mujan/Desktop/data/ADSL_CDR_Text_Parts_A"
file="$dir/tel.txt"
datafile="$dir/ADSL_CDR_Like_Tct4_From_960501_to_97501_Part0.txt"

for line in `cat $file`
do
    current="$line"
    echo `grep -F $current "$datafile" >> output.txt`
done
0 голосов
/ 13 февраля 2019

Ваша команда grep перенаправлена ​​для записи ее вывода в файл, поэтому вы не видите ее на терминале.

В любом случае, вам, вероятно, следует использовать гораздо более простой и быстрый

grep -Ff "$file" "$datafile"

Добавьте | tee -a output.txt, если вы хотите сохранить вывод в файл и одновременно увидеть его.

echo `command` - это ошибочный и неэффективный способ записи command.(echo "`command`" будет просто неэффективным.) Нет смысла записывать стандартный вывод в строку, просто чтобы вы могли echo эту строку в стандартный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...