在文件扩展名中查找具有最高字母字符的文件

时间:2018-03-19 22:04:52

标签: bash find uniq

如何在文件扩展名中找到字母字符最高的文件? 我的应用程序创建的文件示例:

$ find . -name 'L_*.[J-Z]'
L_58420.K
L_58420.J
L_58420.M
L_46657.J
L_58420.N
L_58420.P
L_46657.N
L_58420.Q
L_46657.K
L_58420.O
L_46657.O
L_46657.L
L_46657.M
L_58420.L

我想回来:

L_58420.Q
L_46657.O

只有当前一个字符的文件已经存在时,才会创建更高的字母字符,因此也可以按日期搜索/排序。

3 个答案:

答案 0 :(得分:1)

g++ -std=c++11 -c main.cxx `while read line; do printf "%c-I$line "; done < file.txt`

Sed将字符串拆分为_和。分段,所以sort可以按键2(数字)和3(尾随字符)排序。 while循环读取常量L(忽略它),a和c。打印,如果它是一个新的$ no并保持为新的$ last。在输出中,我们注入_和。再回来。

在澄清之前的旧解决方案:

通过rev |管道sort -r |启:

echo "L_58420.K
L_58420.J
L_58420.M
L_46657.J
L_58420.N
L_58420.P
L_46657.N
L_58420.Q
L_46657.K
L_58420.O
L_46657.O
L_46657.L
L_46657.M
L_58420.L" | sed 's/[_.]/ /g' | sort -r -k 2 -k 3 |  while read L no c ; do if [[ "$no" != "$last" ]]; then echo L_$no.$c; last=$no; fi; done; 
L_58420.Q
L_46657.O

echo "L_58420.K L_58420.J L_58420.M L_46657.J L_58420.N L_58420.P L_46657.N L_58420.Q L_46657.K L_58420.O L_46657.O L_46657.L L_46657.M L_58420.L" | rev | sort -r | rev L_58420.Q L_58420.P L_46657.O L_58420.O L_46657.N L_58420.N L_46657.M L_58420.M L_46657.L L_58420.L L_46657.K L_58420.K L_46657.J L_58420.J 反转一行,rev排序反向(降序),再次sort -r使字符串恢复正常顺序。

要将输出减少到两行,请在末尾添加管道rev。您可以将整个管道附加到find命令,但我不想在测试环境中生成所有文件名。 :)

答案 1 :(得分:1)

简单排序

with open('output/'+file,'w') as f:
    for a in zip(my_x,my_y):
        fig, ax = plt.subplots()
        ax.plot(my_x,my_y) 
        plt.xlim(3500,5700)
        plt.show()
        ax.set_ylabel('y_value')
        ax.set_title('x')
        fig.savefig('output/' + file + '.pdf')

答案 2 :(得分:1)

在第二个字段上排序并获取唯一的文件名:

find ... | sort -t"." -k2,1 -r | 
   awk -F. '$1!=lastname {lastname=$1; print $0; i++; if (i==2) exit}'

当所有文件具有相同的文件长度时,您可以使用

find ... | sort -t"." -k2,1 -r | uniq -w7