У меня есть данные в файле в столбцах. Я хочу написать скрипт, который отображает данные столбца, соответствующие заголовку столбца.

C-1 C-2 C-3 C-4 C-5 C-6 C-7 C-8 C-9
10  30  35  20  9   65  87  30  29
40  32  67  78  30  54  24  21  13
50  43  32  12  43  65  78  67  54

если пользователь выбирает отображение столбца C-8, то выходной результат должен быть

C-8
30
21
67

Я не уверен, как сопоставить имя столбца и распечатать вывод с помощью awk.

Спасибо, KJ

3 ответа3

1

Попробуйте с этим:

function proj() {
    awk -v c="$1" 'NR==1 {for (i=1; i<=NF; i++) if ($i==c) break} {print $i}' "$2"
}

Используйте это как:

proj C-8 table.txt

Если вы ожидаете передать имена столбцов, которых нет в таблице, вы должны проверить, что: add i!=NF+1 перед {print $i} , иначе вы получите столько пустых строк, сколько строк таблицы.

Вы также можете поместить его в отдельный файл вместо использования функции.

1

Создайте скрипт для примера script.sh с этим:

awk -v COLT=$1 '
        NR==1 {
                for (i=1; i<=NF; i++) {
                        if ($i==COLT) {
                                title=i;
                                print $i;
                        }
                }
        }
        NR>1 {
                if (i=title) {
                        print $i;
                }
        }
' file

Где file - это файл с данными в столбцах.

Если вы script.sh C-8 то результат будет:

C-8
30
21
67
1

Без awk вы можете использовать следующую команду:

cut $FILE -f `head -1 $FILE | tr "\t" "\n" | grep -n "^$COLUMNTITLE"'$' | cut -f 1 -d :`

Работает только в том случае, если существует единственный столбец, совпадающий с точным $COLUMNTITLE

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .