- 此问题在此处已有答案**:
awk the column of one file from another file(2个答案)
4天前关闭。
我从预处理管道中拿到了两份文件。
#fileA.csv
87687,"institute Polytechnic, Brazil"
342424,"university of India, India"
24343,"univefrsity columbia, Bogata, Colombia"
82739, "Hero univetsity, greece"
....
<3million lines>
#fileB.csv
342424
82739
...
<some 2 million entries>
我想从fileB.csv
中过滤fileA.csv
,如中所示,我想保留fileA.csv
的第1列中与fileB.csv
匹配的行(这些是ID)。换句话说,对于fileA.csv
中的每一行,如果fileB.csv
中不存在第一列条目,则删除该行。
我不太清楚如何在bash中进行(id更喜欢),而不是在python中编写(对于每一行,查看第一个条目是否在ID列表和过滤器中)。
在上面的简单示例中,输出将只是:
#result.csv
342424,"university of India, India"
82739, "Hero univetsity, greece"
在python中,id do(伪代码):
fileBlist=<load fileB.csv>
for item in fileAcsv:
x=item[0]
yesy_no=x in fileB_list
<append entry>
- 更新 *
我已经尝试了张贴的解决方案,但似乎有一些不一致(也许这是我的错!)。所以,:
fileB.csv has 29206428 lines
fileA.csv has 32128236 lines.
我希望看到结果文件包含29206428行,但结果文件是30932039行。这在逻辑上似乎是不可能的(in other words, for each in row in fileA.csv if the first column entry is not present in fileB.csv, delete the line.
):d和我想知道是怎么回事。
3条答案
按热度按时间q8l4jmvw1#
您可以使用以下
awk
解决方案:u59ebvdq2#
你可以对文件进行排序,然后使用
join
:这是使用相同的格式为文件,因为你上面分享。
zwghvu4y3#
使用awk:
文件大小只有大约15MB的一个'just'
id
s输出