Linux:列出文件名的唯一部分

Nit*_*tin 2 linux file

我有大约50K文件是一个目录(Linux操作系统),他们的命名约定为USER_ID.ORACLE_JOB_ID.SEQUENCED_NUMBER.pdf

我需要在文本文件中列出所有唯一的ORACLE_JOB_ID.如何才能做到这一点?

PS:忘记提及同一目录中有一些其他文件有不同的命名约定,我必须避免它们.

谢谢!

示例:1.6778390.done 2.o6778390.out 3.AWRX_GBL_FAR1.98567432.4.dat.xml 4.AWRX_GBL_FAR1.34789214.4.pdf

qww*_*wwq 6

ls | awk 'BEGIN{FS="."}{ print $2 }' | sort | uniq > file.txt
Run Code Online (Sandbox Code Playgroud)

ls 获取当前目录中所有文件名的列表

awk 通过字段分隔符"."分割每个文件名,仅打印第二个字段

sort 排序第二个字段

uniq 删除连续相同的行

编辑:如果你想使用.pdf限制当前目录中的文件:

find . -iname '*.pdf' | awk 'BEGIN{FS="."}{ print $3 }' | sort | uniq > file.txt
Run Code Online (Sandbox Code Playgroud)

使用ls *.pdf当前dir中有很多pdf时会将参数溢出ls,如错误所示,因为它相当于调用ls50K不同的命令行参数,溢出ARGV.

  • @Nitin处理这个问题的一种方法是将`ls*.pdf`改为`find.-maxdepth 1 \( - type f -a -name'*.pdf'\) - print | sed's:^\./ ::'`. (2认同)
  • `sort | uniq`非常普遍,以及[内置于排序]功能(http://pubs.opengroup.org/onlinepubs/009695399/utilities/sort.html). (2认同)