Awk 从文件中提取列

Awk 从文件中提取列,awk,pattern-matching,Awk,Pattern Matching,我有一个包含一个大表的文件,类似于: Header1 Header2 Header3 ... Header8031 Value1 Value2 Value3 .... Value8031 . . Value1 Value2 Value3 ... Value8031 在另一个文件中,我有一个带有上一个表的一些标题的列表 Header1 Header3000 Header5 Header200 Header10 我只想为列表中的标题提取表中的信息。换

我有一个包含一个大表的文件,类似于:

Header1    Header2    Header3 ... Header8031
Value1     Value2     Value3 .... Value8031
.
.
Value1     Value2     Value3 ...  Value8031
在另一个文件中,我有一个带有上一个表的一些标题的列表

Header1
Header3000
Header5
Header200
Header10
我只想为列表中的标题提取表中的信息。换句话说,获取与列表上的标题匹配的列。[将列表与表上的列id匹配]

输出

Header1   Header3000 Header5 Header200   Header10
Value1    Value3000  Value5  Value200    Value10
Value1    Value3000  Value5  Value200    Value10

我使用
awk
()尝试了一些示例,但无法获得所需的输出。

此awk行适用于您:

awk 'NR==FNR{a[$0]=7;next}FNR==1{for(i=1;i<=NF;i++)if(a[$i])c[++x]=i}
    {for(i=1;i<=x;i++)printf "%s%s", $(c[i]), (i==x?RS:FS)}' headerFile dataFile

awk'NR==FNR{a[$0]=7;next}FNR==1{for(i=1;i此awk行适用于您:

awk 'NR==FNR{a[$0]=7;next}FNR==1{for(i=1;i<=NF;i++)if(a[$i])c[++x]=i}
    {for(i=1;i<=x;i++)printf "%s%s", $(c[i]), (i==x?RS:FS)}' headerFile dataFile

awk'NR==FNR{a[$0]=7;next}FNR==1{for(i=1;i我将使用如下小脚本:

FNR==NR {a[$1]; next}
FNR==1 { for (i=1;i<=NF;i++) if ($i in a) b[i] }
{ for (i=1; i<=NF; i++) if (i in b) printf "%s%s", $i, FS
print ""
}
测试:


我会使用这样一个小脚本:

FNR==NR {a[$1]; next}
FNR==1 { for (i=1;i<=NF;i++) if ($i in a) b[i] }
{ for (i=1; i<=NF; i++) if (i in b) printf "%s%s", $i, FS
print ""
}
测试:


输出中与Header3000和Header200对应的列在哪里?是否有应该跳过它们的原因?链接的问题似乎是完美匹配的,您能否更具体地说明提供的解决方案存在哪些问题?没有跳过,这是一个错误。从链接的解决方案中,我只得到第一个co我所需输出的列。将您基于答案的尝试包含在其中,并解释您的问题中的问题,这将非常有用。输出中与Header3000和Header200相对应的列在哪里?是否有理由跳过它们?链接的问题似乎是完美匹配的,您可以更详细一些吗cific关于您在那里提供的解决方案中遇到了什么问题?没有跳过,这是一个错误。从链接的解决方案中,我只得到了所需输出的第一列。根据那里的答案包括您的尝试,并解释您的问题中的问题。您能解释“a[$0]=7”吗?@user2245731与
a[$0]=1
相同,后来我检查了
如果(a[$I])
重要不是零。你能解释一下“a[$0]=7”吗?@user2245731与
a[$0]=1
相同,后来我检查了
如果(a[$I])
重要不是零。
$ awk -f a.awk f2 f1
Header1 Header3 
Value1 Value3 
Value1 Value3