gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:27 24 4
gpt4 key购买 nike

我有两个主要文件

1) Bigfile 有 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

大文件被分成小块,因此所有小块都具有我上面为大文件提供的相同信息。

我想要的是

文件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

但是因为这是一个有 9900 万行的巨大文件,所以我没有得到输出。而如果我分成 100000 行,我会得到输出。所以我尝试使用以下命令将文件拆分成更小的 block

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}} {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

管道到 column -t,如果您希望输出符合您的预期间距。(注意:关于文件中的行数,join 似乎是线性的:https://unix.stackexchange.com/questions/441369/unix-join-command-complexity)

关于linux - 如何在多个文件上应用 awk 命令来提取行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51889937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com