Как преобразовать эти данные в назначения с помощью awk или другого?

Вы использовали exclude = вместо - exclude = .

 tar -zcvf files-live.tgz public_html/ --exclude='public_html/cache' --exclude='public_html/uplimg' --exclude='public_html/images/listings' --exclude='public_html/sets' --exclude='public_html/manage' --exclude='error_log'
1
25.07.2017, 11:10
2 ответа

Например:

{
    if (NR==1){
        for (i=1; i<=NF; ++i){
            arr[i] = $i
        }
    }else{
        for (i=1; i<=NF; ++i){
            print(arr[i]," = ",$i)
        }
    }
    print("")
}

Для запуска:

awk -f script.awk input
5
28.04.2021, 23:58
cat data |
while IFS=$'\t' read -r -a a; do
   case ${flag+'set'} in
      "set" )
         set -- "${a[@]}"
         for c in "${C[@]}"; do echo "$c = $1"; shift; done
         echo ;;

      * ) C=( "${a[@]}" ); flag= ;;
   esac
done

sed -Ee '
   1h;1N
   /^\n$/{
      $d;P;g;N
   }
   s/^(\S+)\s*((\S.*)?)\n(\S+)\s*((\S.*)?)/\1 = \4\n\2\n\5/
   P;D
' data

perl -F'\t+' -lane '
   @C or @C = @F,next;
   print "$C[$_] = $F[$_]" for 0.. $#C;
   eof or print q[];
' data

Результат

column1 = rowA1
column2 = rowA2
column3 = rowA3

column1 = rowB1
column2 = rowB2
column3 = rowB3

Пояснение

  1. bash

    *)Сохранить первую строку в массиве Cв то время, когда флаг не установлен. Затем быстро установите его так, чтобы в следующий раз мы не прибыли сюда. *)Массив aразбивается на аргументы с помощью команды set. *)Затем мы перебираем столбцы, доступ к которым осуществляется через "${c[@]}" в цикле forи печатаем вместе с $1 (, который затем смещается )*)Примечание IFS устанавливается на вкладку с помощью конструкции $'\t'. Так как это один из специальных символов, поэтому ряд из них будет свернут в один, и поэтому мы не увидим пустых полей.

  2. perl

    *)Установите для FS одну или несколько вкладок:-F'\t+'и включите режим авторазбиения. *)Та же логика, что и в решении на основе bash, в котором мы сохраняем данные столбцов, найденные в 1-й строке массива @C. Массивы @Cи данные полей текущей записи в @Fпечатаются, беря по одному из каждого.

  3. sed

    *)Здесь мы сначала преобразуем все символы табуляции в пробелы. *)Сохранение данных столбцов первой строки в области хранения. *)Для всех остальных строк добавьте столбцы к текущей строке. *)Затем мы продолжаем выбирать первые элементы из текущей строки/столбца и сокращаем пространство шаблона, удаляя эти напечатанные элементы. *)Условие остановки возникает, когда не остается пробелов.

3
28.04.2021, 23:58

Теги

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