Вы можете использовать следующую awk
скрипт для преобразования файла:
transform.awk:
{
# On the first record this loop runs twice. once
# for the headers once for the first line of data.
# In all subsequent lines is prints only the data
# because h==1.
for(;h<=1;h++){
for(i=1+h;i<=NF;i+=2){
printf "%s ", $i
}
printf "\n"
}
h=1
}
Затем выполнить это следующим образом:
awk -f transform.awk RS='' file
Выход:
A B A D E
25 26 14 39 42
74 36 81 96 17
23 14 74 87 17
Чтобы получить надлежащее соответствие столбцов можно просто труба, column -t
:
awk -f transform.awk RS='' file | column -t
Выход:
A B A D E
25 26 14 39 42
74 36 81 96 17
23 14 74 87 17
Ключевым моментом здесь является использование переменной RS
(разделитель записей). Использование пустой строки для RS
отделяет записи пустыми строками. Это то же самое, что и установка \n\n+
(одна или несколько пустых строк). Первая запись примеров будет выглядеть следующим образом:
A 25
B 26
A 14
D 39
E 42
awk
по умолчанию расщепляется на [[:space:]]+
который включает в себя новые строки. Это дает нам следующие поля для записи.
A 25 B 26 A 14 D 39 E 42
Алгоритм, показанный выше, преобразует эти поля в желаемый результат.
Вы предприняли какие-либо попытки? – anubhava
Последние два дня - это единственное, что я делаю :) – jimakos17
Не говорите * нам, что вы сделали попытку; * шоу * мы попытка. – chepner