Кросс-компиляция файловой системы BTRFS

Решение 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
1
23.12.2014, 00:22
1 ответ

Ext2FS.H обеспечивается пакетом E2FSLIBS-DEV . Так что, возможно, проверьте, установлены ли у вас E2FSLIBS-DEV.

1
27.01.2020, 23:51

Теги

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