Как перенаправить поля строки в vars?

#linux #bash #shell #awk #sed

#linux #bash #оболочка #awk #sed

Вопрос:

У меня есть следующий вывод из команды:

  1  192.168.1.1 (192.168.1.1)  3.032 ms
 2  172.26.0.15 (41.226.22.21)  53.825 ms
 3  172.26.0.13 (172.26.0.13)  57.146 ms
 4  193.95.19.137 (193.95.19.137)  60.792 ms
 5  193.95.96.69 (193.95.96.69)  65.873 ms
 

Я хочу перенаправить поля каждой строки в переменные nbr , host , ip и time

Я прочитал все строки с:

 while read LINE; do
    echo $LINE #How to redirect the line fields to vars
done < <(traceroute yahoo.fr)
 

Ответ №1:

Пример:

 while read _ ip ip2 ms _; do
    echo "$ip $ms ms"
done < <(traceroute yahoo.fr)
 

Где _ находится переменная-заполнитель.

Убрать круглые скобки, как в вашем комментарии :

 % x='(127.0.0.1)'
% echo ${x//[)(]/}                                        
127.0.0.1
 

это расширение параметра bash

Комментарии:

1. как извлечь ip2 из () ?

2. Одним из способов устранения скобок является использование IFS="$IFS()"

3. @GillesQuenot По умолчанию IFS имеет длину в три символа: пробел, табуляция, перевод строки. Мы можем добавлять к нему по своему усмотрению. Кстати, изменение в IFS может быть сделано локально: while IFS="$IFS()" read a ip ip2 ms b; do ....