Решение bash
:
declare -a out
EOF=false
IFS=$'='
until $EOF; do
read -r skip val || EOF=true
if [ ! -z "$val" ]
then
out+=("${val//[[:space:]]/}")
else
tmp="${out[@]}"
printf '%s\n' "${tmp// /,}"
out=()
fi
done < file
Как это работает
out
для хранения выходной строки, установить переменную EOF
, чтобы отслеживать конец файла, IFS
для разделителя входных полей для чтения
. val
. если [! -z "$ val"]
: проверить, не равна ли длина переменной $ val
нулю, мы удаляем пробел в $ val
, помещаем его в массив out
. $ val
равна нулю, что означает, что мы получаем пустую строку или конец файла, мы назначаем весь элемент массива out
переменной tmp, затем заменяем всю пространственную переменную tmp
от ,
, нашего разработанного разделителя перекодирования вывода. из
в ноль для следующей работы. Другое решение, более краткое, более короткое для вас - использование perl
:
$ perl -F'=' -anle '
BEGIN { $, = "," }
push @out,$F[-1] if @F;
print @{[map {s/\s// && $_} @out]} and @out = ()
if /^$/ or eof;
' file
3,404212109727229,A24AD11812232B47688ADBF15CE05CA9,1,SIM,COMP128_3
3,404212109727230,A24AD11812232B47688ADBF15CE05CB8,1,SIM,COMP128_3
3,404212109727231,A24AD11812232B47688ADBF15CE05CD6,1,SIM,COMP128_3
Ext2FS.H
обеспечивается пакетом E2FSLIBS-DEV
.
Так что, возможно, проверьте, установлены ли у вас E2FSLIBS-DEV.