Linux 如何在多个文件上应用awk命令来提取行?
我有两个主要文件 1) Bigfile有9900万行。我已经把大的分成了小块。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
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