根据字符串中的特定值进行排序。

我有一个内容如下的文件:


    666500872101_002.log

    738500861101_003.log

    738500861101_002.log

    666500872101_001.log

    741500881101_001.log

    738500861101_001.log

    741500881101_002.log

    666500872101_003.log

    741500881101_003.log

    666500872101_004.log

我需要首先基于字段5至8中的值对行进行排序,即7415 0088 1101_003.log,然后基于日志的部件号即741500881101_ 003 .log来获得如下所示的内容:


738500861101_001.log

738500861101_002.log

738500861101_003.log

666500872101_001.log

666500872101_002.log

666500872101_003.log

666500872101_004.log        

741500881101_001.log

741500881101_002.log

741500881101_003.log

使用无法获得任何良好的结果sort。


ABOUTYOU
浏览 318回答 2
2回答

繁星coding

您可以sort在以下选项中使用命令wit:sort -n -k1.5,1.8 -n -k1.14,1.16 fileToSort.log选项:-n 用于数字排序-k1.5,1.8并-k1.14,1.16定义您的排序键例子:$ sort -n -k1.5,1.8 -n -k1.14,1.16 fileToSort 738500861101_001.log738500861101_002.log738500861101_003.log666500872101_001.log666500872101_002.log666500872101_003.log666500872101_004.log741500881101_001.log741500881101_002.log741500881101_003.log

斯蒂芬大帝

在学习SPARK的过程中,我解决了这个问题。我不是UNIX shell程序员。因此想到了用火花解决问题val logList = Array("666500872101_002.log","738500861101_003.log","738500861101_002.log","666500872101_001.log","741500881101_001.log","738500861101_001.log","741500881101_002.log","666500872101_003.log","741500881101_003.log","666500872101_004.log")val logListRDD = sc.parallelize(logList)logListRDD.map(x=>((x.substring(4,8), x.slice(x.indexOfSlice("_") +1, x.indexOfSlice("."))),x)).sortByKey().values.collect.take(20)输出:Array [String] = Array(738500861101_001.log,738500861101_002.log,738500861101_003.log,666500872101_001.log,666500872101_002.log,666500872101_003.log,666500872101_004.log,741500881101_001.log,741500881101_1500.002解释我做了什么sc.parallelize(logList) -是创建RDD的步骤,该RDD是spark的核心组件。map(x =>(((x.substring(4,8),x.slice(x.indexOfSlice(“ _”)+1,x.indexOfSlice(“。”))),x)) -这将提取内容从Array生成键值对。在我们的例子中,value是***。log值,键是我们要排序的子字符串数组(0086,001)。KeyValue对将看起来像[(0086,001),738500861101_001.log]sortByKey() -根据上面生成的Key对数据进行排序values-获取与键对应的值collect.take(20) ->在屏幕上显示o / p
打开App,查看更多内容
随时随地看视频慕课网APP