Linux 如何在多个文件上应用awk命令来提取行?

Linux 如何在多个文件上应用awk命令来提取行?,linux,awk,Linux,Awk,我有两个主要文件 1) Bigfile有9900万行。我已经把大的分成了小块。 2) 文件2包含一些其他信息 Majorfiles information is below :- Bigfile Col1 Col2 Col3 Col4 A 1 A T A 2 A T A 3 G C A 4 C G A 5 G T A

我有两个主要文件

1) Bigfile有9900万行。我已经把大的分成了小块。
2) 文件2包含一些其他信息

  Majorfiles information is below :- 

  Bigfile
  Col1  Col2  Col3  Col4  
  A      1     A     T
  A      2     A     T
  A      3     G     C
  A      4     C     G
  A      5     G     T
  A      6     T     A

 File2
 Col1   Col2  Col3      
 A       4    Usefull 
 A       6    NonUsefull
Bigfile被分割成小块,所以所有小块都有我上面为Bigfile提供的相同信息

我想要的是

文件3

 Col1  Col2  Col3  Col4  
  A      4     C     G
  A      6     T     A
我试过了

awk 'BEGIN { while ((getline<"Bigfile")>0) {REC[$2]=$0}} {print REC[$2]}'  <   file2 > file3
接下来,我使用下面的代码将所有文件放入循环中

files=`ls *txt | sed "s|ls *txt||"` 

for i in $files
do
R1=${i}.txt #join
echo `awk 'BEGIN { while ((getline<"$R1")>0) {REC[$2]=$0}} {print REC[$2]}' <   file2 > file_${i}`
done
files=`ls*txt|sed“s|ls*txt||”`
对于$file中的i
做
R1=${i}.txt#join
echo`awk'BEGIN{while((getline0){REC[$2]=$0}}{print REC[$2]}'file{i}`
完成
但是文件${i}给了我文本文件contain only命令

“awk'BEGIN{while((getline0){REC[$2]=$0}}{print REC[$2]}”


我没有得到预期的输出。

我会使用
join
而不是
awk

join -1 1 -1 2 -2 1 -2 2 -o "1.1, 1.2, 2.3, 2.4"  smallfile bigfile
输出:

Col1 Col2 Col3 Col4
A 4 C G
A 6 T A
如果希望输出与预期间距匹配,请将管道连接到
列-t

(注意:
join
似乎与文件中的行数成线性关系:)

一点也不清楚,如果文件已经被分割成块,请您详细说明为什么要再次运行
awk
?如果您要分割这个巨大的文件,那么它的标准应该是什么?请详细说明。分割文件不是我的问题我使用awk开始10000行(在分割的文件上).现在我有99个这样的文件,所以我不能运行99次awk,所以我重新运行,将所有内容放入循环中。您不需要运行
awk
99次,您可以调用单个
awk
,并可以读取所有99个文件,例如
awk'code here..'文件[0-9][0-9]
,再试一次。1通过阅读这些文件,仍然不清楚您需要的预期输出是什么?请在您的帖子中更清楚。我的文件名是smallfile-00.txt smallfile-01.txt…smallfile-99.txt,输出将是file\u smallfile-00.txt file\u smallfile-01.txt…file\u smallfile-99.txt
Col1 Col2 Col3 Col4
A 4 C G
A 6 T A