0

我以这种方式有2个文件

文件 1 有 1 行:

6
4 
13 
25 
35 
50  
65 
75 
and so on.....

file2 有 1 行

24
45
76
and so on.....

我想取 file2 中的每个值(一次一个)并与 file1 进行比较,如果 file1 的值小于该数字,则取这些值并将它们保留在列表中,然后根据数字对它们进行排序并打印最大值

例如:我在file2中取了24个数字并与file1进行比较,发现6,4和13低于该数字,然后我将它们提取并保存在列表中并对其进行排序并打印最大值(即13)

4

3 回答 3

0

awk 解决方案:

awk 'NR==FNR{a[$0];next} {b[FNR]=$0}
END{
        n=asort(b)
        for(j in a)
                for(i=n;i>0;i--)
                        if(b[i]<j){
                                print "for "j" in file2 we found : "b[i]
                                break
                        }
}' file2 file1

输出:

for 45 in file2 we found : 35 
for 76 in file2 we found : 75 
for 24 in file2 we found : 13 

注意:有优化的空间。如果性能很关键,你可以考虑(只是建议)

  • 对file1进行降序排序
  • 对文件 2 升序排序
  • 从排序的file2中取first,从file1中遍历file1.first,当你找到较小的时,记录位置/索引x
  • 从排序的文件2中取第二个,从file1.x开始比较,当找到正确的一个时,更新x
  • 直到file2结束

蛮力方式将采取或O(mxn)取决于O(nxm)哪个更大。nm

上面的算法……我没分析,应该比O(mxn)……快;)

python 和 awk 都可以完成这项工作。如果可能,将这两个文件加载到内存中。如果你有怪物文件,那是另一个算法问题。例如排序大文件

于 2013-04-03T22:09:49.933 回答
0

将每个文件读入一个list,将每一行转换为int. 然后对两个列表进行排序以使我们能够有效地迭代,

file1 = sorted([int(l) for l in open('file1.txt').read().split()])
file2 = sorted([int(l) for l in open('file2.txt').read().split()])

i = 0
for file2_number in file2:
    while i+1 < len(file1) and file1[i+1] < file2_number:
        i += 1
    print file1[i]

这当前会打印答案 ( 13 35 75),但您可以轻松修改它以返回list如果需要。

于 2013-04-03T22:18:37.917 回答
0

使用 Python,首先将 file1 中的所有行和 file2 中的所有行读入两个单独的列表中,然后您可以简单地遍历它们,将文件 1 中的每个数字与 file2 中的每个数字进行比较,如下所示:

#First load each of the lines in the data files into two separate lists
file1Numbers = [6, 4, 13, 25, 35, 50, 65, 75]
file2Numbers = [24, 45, 76]
extractedNumbers = []

#Loops through each number in file2
for file2Number in file2Numbers:

    #Loops through each number in file 
    for file1Number in file1Numbers:

        #Compares the current values of the numbers from file1 and file2
        if (file1Number < file2Number):

            #If the number in file1 is less than the number in file2, add
            #the current number to the list of extracted numbers
            extractedNumbers.append(file1Number)


    #Sorts the list of extracted numbers from least to greatest
    extractedNumbers.sort()

    #Prints out the greater number in the list
    #which is the number located at the end of the sorted list (position -1)
    print extractedNumbers[-1]
于 2013-04-03T22:20:46.610 回答