根据从另一个文件中选择的标题从文件中提取列

lud*_*lud 5 unix awk

我有以下要在awk中解决的问题。我有一个大的文本表,用逗号分隔,由100k行和5k cols组成。第一行是标题,第一列是记录ID。然后,我有了第二个文本文件,其中包含第一个文件中标头的子集。我想提取第一个文件的所有列,其标题包含在第二个文件中给出的列表中。这里是输入和所需输出的示例:

数据文件

   ID, head1, head2, head3, head4  
    1, 25.5, 1364.0, 22.5, 13.2  
    2, 10.1, 215.56, 1.15, 22.2  
Run Code Online (Sandbox Code Playgroud)

列表文件

head1  
head4  
Run Code Online (Sandbox Code Playgroud)

所需的输出:

ID, head1, head4  
1, 25.5, 13.2  
2, 10.1, 22.2
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些有关如何以awk或通过unix脚本解决此问题的建议吗?在此先感谢您的帮助!

Lev*_*sky 4

我有一个想法,但由于我没有 shell 编程经验(并且不知道 awk),这看起来像是以一种可笑的方式重新发明一些轮子:

$ cat DATA.TXT 
ID, head1, head2, head3, head4
1, 25.5, 1364.0, 22.5, 13.2
2, 10.1, 215.56, 1.15, 22.2

$ cat LIST.TXT 
head1
head4

$ cols=($(sed '1!d;s/, /\n/g' DATA.TXT | grep -nf LIST.TXT | sed 's/:.*$//'))

$ cut -d ',' -f 1$(printf ",%s" "${cols[@]}") DATA.TXT 
ID, head1, head4
1, 25.5, 13.2
2, 10.1, 22.2
Run Code Online (Sandbox Code Playgroud)

PS 我从这个这个答案中使用了一些关于 bash 数组的非常基本的想法。