我有一系列的多个文件。 我想对这些文件进行sorting,从每个文件中select最后一行,然后将这些行传送到一个新的单个文件中。
我的文件是这样的:
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文件进行sorting,提取最后一行,并把它放到一个新的汇总文件中。 基本上,目标是生成一个文件,在所有父目录中,第三列的值最大。 理想情况下,我还想在输出文件中添加一个包含父目录名称(Track_0002)的列。
我有这种想法,但其余的事情对我来说有点麻烦。 例如,我可以同时对所有csv文件进行sorting,并将输出写入新文件(例如51_Sur_extracted_data_sort.csv)? 然后,我可以grep最后一行,pipe它到一个新的文件?
sort -t"," -k3,3g filename
谢谢,K
我会做这样的事情:
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
是的,我的输入数据有点无聊。 当然,你可以再次分类最终的结果,但我会留下你的想象力(你已经有了这一步):)
如果你想要任何给定的命令的最后一行,使用tail
。
所以对于你,你会这样做:
sort -t"," -k3,3g filename | tail -n1 > newfilename