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