匹配列标题并使用 awk 打印列的值

匹配列标题并使用 awk 打印列的值

我的文件中有列数据。我想编写一个脚本,显示与列标题匹配的列的数据。

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

答案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

答案2

如果没有awk,您可以使用以下命令:

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

仅当有一列与精确匹配时才有效$COLUMNTITLE

答案3

尝试一下这个:

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

如果您希望传递表中不存在的列名,则应检查:i!=NF+1在之前添加{print $i},否则您将获得与表的行一样多的空行。

您也可以使用函数将其放在单独的文件中。

相关内容