根据 awk/sed 中的列名称匹配打印列值

根据 awk/sed 中的列名称匹配打印列值

在我的 shell 脚本中执行一些命令后,我得到以下输出:

Name      English    Maths    science   Social studies
------    --------  --------  -------- ---------------
James     20        25        30        40

(many values)
(or)

Roll Num   Name     English   Maths   science   Social studies
---------  ----    --------  -------  --------  ---------------
  1        James     20        25        30        40

(Many values)

我想根据列标题匹配打印值。

Example:
cmd(matching Maths) test.txt

o/p:25

我尝试了一些awk命令sed,但没有得到正确的输出。

有人可以帮助我如何得到这个吗?

答案1

    awk -v subj="Maths" '{
    for(n=1;n<=NF;n++){
      if ($n==subj){
        subp=n;nrr=NR+2
   }};
   if(NR==nrr){
      print $subp
   }}' test.txt

这里,如果主题是Maths字段位置subp并且nrrNR +2其中谎言的值subj Maths)被分配。

相关内容