我有两个主要文件
1)大文件有9900万行。我已经把大的分成了小块。
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
但是因为这是一个有9900万行的大文件,所以我没有得到输出。而如果我分成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 { while ((getline<"$R1")>0) {REC$2=$0}} {打印记录$2}“
我没有得到预期的输出。
发布于 2018-08-19 05:13:20
我会使用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)
https://stackoverflow.com/questions/51889937
复制相似问题