我有一系列的多个文件.我想对这些文件进行排序,从每个文件中选择最底行,然后将这些行通过管道传送到新的单个文件中.
我的文件如下所示:
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
是的,我的输入数据有点无聊.当然,您可以再次对最终结果进行排序,但我将把它留给您的想象力(您已经完成了该步骤):)