Добрый день, есть файл с таким содержимым:
name1
PoweredOff
192.168.250.31
Debian GNU/Linux 6 (64-bit)
Other 2.6.x Linux (64-bit)
name2
PoweredOn
192.168.250.99
Debian GNU/Linux 6 (64-bit)
Other 3.x Linux (64-bit)
Нужно привести его к виду:
|name1|PoweredOff|192.168.250.31|Debian GNU/Linux 6 (64-bit)|Other 2.6.x Linux 64-bit)|
|name2|PoweredOn|192.168.250.99|Debian GNU/Linux 6 (64-bit)|Other 3.x Linux (64-bit)|
Пытался делать подобное:
IFS=$'
'; for i in $(cat file); do if [[ -n $i ]]; then tr -s '
' ' '; fi; done
но это не работает
Ответ
При помощи awk:
awk -vRS='' -vFS='
' -vOFS='|' '{$1=$1;print "",$0,""}' < data.txt
Переменная RS задает разделитель между записями (пустая строка), FS - разделитель полей внутри записи (перевод строки). Любая команда, изменяющая любое поле (в данном случае $1=$1) неявно пересобирает запись ($0), используя в качестве разделителя значение OFS.
UPD: изменил для произвольного числа строк в записи.
Комментариев нет:
Отправить комментарий