linux排序,选择最后一行,管道到新文件

我有一系列的多个文件.我想对这些文件进行排序,从每个文件中选择最底行,然后将这些行通过管道传送到新的单个文件中.

我的文件如下所示:

1,  100,  2.5
2,  100,  3.3
3,  100,  5.1
4,  100,  1.2

这些文件都命名为51_Sur_extracted_data.csv

这些文件位于父目录中,如下所示:

Track_0001 / output_dfsu / 51_Sur_extracted_data.csv
Track_0002 / output_dfsu / 51_Sur_extracted_data.csv

因此,我想对第三列上的所有csv文件进行排序,提取底线,然后将其放入新的摘要文件中.基本上,目标是产生一个文件,该文件具有所有父目录中第三列的最大值.理想情况下,我还要在输出文件中添加一列,其中包含父目录的名称(Track_0002).

我已经弄清楚了,但是其余的对我来说有点麻烦.例如,是否可以同时对所有csv文件进行排序并将输出写入新文件(例如51_Sur_extracted_data_sort.csv)?然后我可以grep最后一行并将其通过管道传输到新文件?

sort -t"," -k3,3g filename

谢谢,
ķ

解决方法:

我会做这样的事情:

for a in */*/*.csv
do 
    dname="$(basename "$(dirname "$a")")"
    echo -e "$dname\t$(sort -t"," -k3,3g "$a" | tail -n 1)"
done

在我的测试文件中,它返回:

output_abcd 3,  100,  9.1
output_bcde 3,  100,  5.1
output_cdef 3,  100,  5.1
output_abcd 3,  100,  5.1
output_bcde 3,  100,  5.1
output_cdef 3,  100,  5.1
output_abcd 3,  100,  5.1
output_bcde 3,  100,  5.1
output_cdef 1,  100,  7.5
output_abcd 3,  100,  5.1
output_bcde 3,  100,  5.1
output_cdef 3,  100,  5.1
output_abcd 3,  100,  5.1
output_bcde 3,  100,  5.1
output_cdef 3,  100,  5.1
output_abcd 3,  100,  5.1
output_bcde 3,  100,  5.1
output_cdef 3,  100,  5.1
output_abcd 3,  100,  5.1
output_bcde 2,  100,  42.3
output_cdef 3,  100,  5.1
output_abcd 3,  100,  5.1
output_bcde 3,  100,  5.1
output_cdef 3,  100,  5.2
output_abcd 3,  100,  5.1
output_bcde 3,  100,  5.1
output_cdef 3,  100,  5.1

是的,我的输入数据有点无聊.当然,您可以再次对最终结果进行排序,但我将把它留给您的想象力(您已经完成了该步骤):)

上一篇:php-MySQL @grouping结果按ID并按分数排序”问题


下一篇:mysql-按两列进行SQL排序,忽略null