首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在多个文件上应用awk命令来提取行?

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

Stack Overflow用户
提问于 2018-08-17 14:56:45
回答 1查看 45关注 0票数 0

我有两个主要文件

1)大文件有9900万行。我已经把大的分成了小块。

2)具有其他信息的File2。

代码语言:javascript
复制
  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

代码语言:javascript
复制
 Col1  Col2  Col3  Col4  
  A      4     C     G
  A      6     T     A

我试过了

代码语言:javascript
复制
awk 'BEGIN { while ((getline<"Bigfile")>0) {REC[$2]=$0}} {print REC[$2]}'  <   file2 > file3

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

代码语言:javascript
复制
split -l 100000 -d Bigfile.txt smallfile- --additional-suffix=.txt

接下来,我使用下面的代码将所有文件放入循环中

代码语言:javascript
复制
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}“

我没有得到预期的输出。

EN

回答 1

Stack Overflow用户

发布于 2018-08-19 05:13:20

我会使用join而不是awk

代码语言:javascript
复制
join -1 1 -1 2 -2 1 -2 2 -o "1.1, 1.2, 2.3, 2.4"  smallfile bigfile

输出:

代码语言:javascript
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51889937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档