Преобразование вывода grep из формата строки в формат столбца в конвейере

Попробуйте изменить вот так

for host in $(cat /etc/hosts | grep text | cut -d' ' -f 1 | sort -u); do
   ssh $host \
   "sudo sed -i \"s/enabled = 1/enabled = 0/\" /etc/yum.repos.d/testing.repo"
done
0
21.05.2020, 01:58
2 ответа

Использование вместо

dsk -file "$file" | awk '
    tolower($1) ~ /string1|string2|string3/ { n++; vars[n] = $1; vals[n] = $2 }
    END {
        for (i = 1; i <= n; i++) printf "%s\t", vars[i]
        print ""
        for (i = 1; i <= n; i++) printf "%s\t", vals[i]
        print ""
    }
'
1
28.04.2021, 23:14

Инструменты общего назначения -, упомянутые в ответе, на который ссылается @SteelDriver, очень подходят, как и ответ @glenn jackman.

Однако, если ваши данные отформатированы так же просто, как вы указываете --то есть, если в string1.. stringNкусках --нет пробелов, то за счет двойного чтения вашего входного файла вы также можете сделать это:

dsk -file <filename> | grep -Ei 'string1|string2|string3' > tempfile.txt

readarray labels < <(awk '{print $1}' tempfile.txt)
readarray values < <(awk '{print $2}' tempfile.txt)

printf '%s\t' ${labels[@]}
printf '\n'

printf '%s\t' ${values[@]}
printf '\n'

Такое форматирование может быть несколько упрощенным и, в частности, может не выравнивать записи так хорошо, как хотелось бы. Но если все, что вам нужно, это вывод с разделителями табуляции -, он сделает это.

0
28.04.2021, 23:14

Теги

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