我有两个主要文件
1)Bigfile有99百万行。我已将大块切成小块。
2)File2还有一些其他信息。
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
大文件被分割成小块,因此所有小块都具有我上面为大文件提供的相同信息。
我想要的是
file3
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
但是因为这是一个有99百万行的巨大文件,所以我没有得到输出。而如果我分成100000行,则会得到输出。因此,我尝试使用以下命令将文件拆分为较小的块
split -l 100000 -d Bigfile.txt smallfile- --additional-suffix=.txt
然后我使用下面的代码将所有文件放入循环
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
但是file _ $ {i}给我的文本文件仅包含命令
“ awk'BEGIN {而((getline <” $ R1“)> 0){REC [$ 2] = $ 0}} {print REC [$ 2]}”
我没有预期的输出。
答案 0 :(得分:0)
我将使用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
如果希望输出与期望的间距相匹配,请使用输送到column -t
。
(注意:join
在文件中的行数方面似乎是线性的:https://unix.stackexchange.com/questions/441369/unix-join-command-complexity)