如何在文件扩展名中找到字母字符最高的文件? 我的应用程序创建的文件示例:
$ 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
只有当前一个字符的文件已经存在时,才会创建更高的字母字符,因此也可以按日期搜索/排序。
答案 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