gpt4 book ai didi

bash - 查找两个文件之间的公共(public)行及其行号

转载 作者:行者123 更新时间:2023-11-29 09:01:01 25 4
gpt4 key购买 nike

我想找到两个文件(大文件)之间的公共(public)行,一个有 9000 万行,另一个有 10 万行,还有它们的行号。

comm -12 file1 file2

给我通用行,但我也想知道各个文件的行号

最佳答案

此解决方案适用于我的小型测试文件 - 我不确定它在包含 9000 万行的文件上的表现如何。

tab=` printf '\t' `
join -t"$tab" -j2 <( cat -n file1 ) <( cat -n file2 )

这是有效的,因为 cat -n 在每行前面加上一个空格填充的数字,后跟一个制表符。 join 然后会找到仅查看第一个选项卡之后内容的公共(public)行。

连接完成后,您应该会看到公共(public)行,每行后跟两个数字。第一个数字是 file1 的行号,第二个是 file2 的行号。

警告:如果文件还没有制表符,这将起作用。如果不是这种情况,您可以使用 sed 将第一个制表符转换为“安全”字符。

safe="|"
join -t"$safe" -j2 \
<( cat -n file1 | sed -e "s:\t:$safe:" ) \
<( cat -n file2 | sed -e "s:\t:$safe:" )

此外,根据 join 的实现方式,您可能希望在第一个进程替换中列出较小的文件,在第二个进程替换中列出较大的文件。这样,较小的文件可能都适合内存,而较大的文件可能会被扫描并有效地选择匹配行。我不知道情况是否如此,但可能值得一试。

关于bash - 查找两个文件之间的公共(public)行及其行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20704307/

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