Sorting 将行值与列值匹配,然后重命名该行

Sorting 将行值与列值匹配,然后重命名该行,sorting,awk,match,Sorting,Awk,Match,我有一个具有以下标题的文件: 文件1: location, nameA, nameB, nameC 和第二个文件,格式如下: 文件2: ID_number, names 101, nameA 102, nameB 103, nameC 我希望将File1中的行名称与File2的第2列中的行名称进行匹配,如果匹配,则将标题中的名称替换为ID号。因此,最终生成的文件如下所示: 文件1:

我有一个具有以下标题的文件:

文件1:

location, nameA, nameB, nameC
和第二个文件,格式如下:

文件2:

ID_number, names            
101, nameA            
102, nameB                      
103, nameC          
我希望将File1中的行名称与File2的第2列中的行名称进行匹配,如果匹配,则将标题中的名称替换为ID号。因此,最终生成的文件如下所示:

文件1:

location, 101, 102, 103
我一直在尝试用awk来做这件事,但我不能让它产生任何东西,我不知道如何要求它做我想要的最后一部分

awk -F "," '{print $2}'  file2.csv | while read i; do awk 'NR=1;{for (j=0;j<=NF;j++) {if ($j == $i) printF $j; }}' file1.csv;done > test.csv
这是一个非常大的文件,有数千列和数千行,所以我在这里列出了我问题中文件的简化版本


谢谢

如果您的csv字段中没有嵌入逗号,则此操作应该有效。它还假设两个文件都有一个标题行

awk '

  BEGIN { FS=","; OFS=", " }

  FNR == 1 {       # if it is the header line
    if (NR != 1)     # if it is the second file
      print            # print it
    next             # go to next line of file
  }

  { gsub(/ +/, "") }  # compress spaces

  NR == FNR {         # if it is the first file
    a[$2] = $1        # save the info
    next              # go to next line of file
  }

  {
    $2=a[$2]; $3=a[$3]; $4=a[$4]  # swap names
    print                         # print line
  }

' file2.csv file1.csv
测试文件:

file1.csv

location, nameA, nameB, nameC
Earth, Chuck, Edward, Bob
The Moon, Bob, Doris, Al
文件2.csv

ID_number, names
101, Al
102, Bob
103, Chuck
104, Doris
105, Edward
输出:

location, nameA, nameB, nameC
Earth, 103, 105, 102
TheMoon, 102, 104, 101

你能告诉我a[$2]函数在做什么吗?我还想更改标题,而不是将“Chuck”、“Edward”和“Bob”更改为103105102-nameA、nameB和nameC将更改为103105102。