Переменная внутри командной переменной на bash
Я пытаюсь извлечь ссылочные номера для IP-адресов, которые не обновляются с помощью BASH на centos, у меня есть CSV с не обновленными адресами (IPs_withoutrefn.csv), где я извлекаю второй столбец, а затем мы сравниваем это значение с другим CSV (IP-reference.csv) для извлечения ссылочного номера.
Для этого я пытался сделать переменную таким образом, но вывод всегда пуст, если я попробую эту команду на оболочке без использования переменной, она работает правильно.
REFNO=$(grep "$IP" ../IP-references.csv | awk 'BEGIN{FS=OFS=";"}{sub(/\r$/,"");print $2"\r"}')
Я уже пытался преобразовать этот grep в функцию и изменить "$IP" внутри grep различными способами, которые я читаю здесь, например ("^$IP;" или "$IP;" или ${IP} ...) но результат его всегда один и тот же.
И это полный код, который я использую.
while IFS=";" read -r col1 col2
do
#IP to variable#
IP=$col2
echo "$IP"
#We search the IP and we extract the REFNO##
REFNO=$(grep "$IP" ../IP-references.csv | awk 'BEGIN{FS=OFS=";"}{sub(/\r$/,"");print $2"\r"}')
echo "$REFNO"
echo "$IP"
done < "../IPs_withoutrefn.csv"
Я надеюсь, что это достаточно ясно для понимания, если нет, пожалуйста, дайте мне сейчас.
Пример IPs_withoutrefn.csv:
- ; 1.1.1.1
- ;
- ; 1.1.1.2
Пример IP-reference.csv
Client1;89345013745; ModelNo; статус; узел1; sect1; узел2; sect2;; 1.1.1.1; 1.1.1.1;;; datexpiration;
Client2; 89345013746; ModelNo; статус; узел1; sect1; узел2; sect2;; 1.1.1.2; 1.1.1.2;;; datexpiration;
Client3; 89345013747; ModelNo; статус; узел1; sect1; узел2;sect2;;1.1.1.3;1.1.1.3;;;datexpiration;
Спасибо.
1 ответ
cut -d ";" -f 2 IPs_withoutrefn.csv | xargs -I {} grep {} IP-references.csv
Это напечатало бы все строки в IP-ссылках, которые соответствуют IP-адресам из первого файла.
Вы можете еще больше улучшить вывод, добавив | cut -d ";" -f 1,11
перечислить в формате
cut -d ";" -f 2 IPs_withoutrefn.csv | xargs -I {} grep {} IP-references.csv | cut -d ";" -f 1,11
Client1; 1.1.1.1
Client2; 1.1.1.2
-d - разделитель, -f - номера полей