具有特定名称范围的 Bash 列表文件

标签 bash awk ls

我有一个目录,其中包含具有唯一时间的 txt 文件,这些文件是在一夜之间生成的。鉴于文件中的唯一时间戳,我试图列出这些文件。 文件名的一些示例如下:

file_20210122_1130_1.txt 
file_20210122_1133_1.txt 
file_20210122_1221_1.txt 
file_20210122_1342_1.txt 
file_20210122_1721_1.txt 
file_20210122_1911_1.txt
file_20210122_2009_1.txt
file_20210122_2020_1.txt
file_20210122_2130_1.txt
...

我希望能够列出 1900 年到 2100 年之间的文件(使用文件名本身中包含的模式),它应该列出以下内容:

file_20210122_1911_1.txt
file_20210122_2009_1.txt
file_20210122_2020_1.txt

我正在尝试使用下面的代码片段,但它部分有效并且没有列出所有文件。

cd /home/somedir/files;
ls *.txt | awk '/1900/,/2100/'

如有任何帮助,我们将不胜感激。

最佳答案

如果文件名的格式相同,你可以使用awk并将字段分隔符设置为_ 然后检查第三个字段是否在1900和2100之间

ls -A1 *.txt | awk -v FS=_ '$3 >= 1900 && $3 <= 2100'

输出

file_20210122_1911_1.txt
file_20210122_2009_1.txt
file_20210122_2020_1.txt

关于具有特定名称范围的 Bash 列表文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67942752/

相关文章:

java - Unix: "ls"命令显示带 ? 的文件延长后

c - Linux 命令菜单(例如 ls、ipconfig 等),用于 fork 并使用 execl 将命令作为子进程运行

bash - 如何回显 'cat file.js; ls' 的前半部分?

bash - awk 与空白文件不匹配

linux - 替换换行符

awk - 使用awk printf对文本进行URL解码

list - bash :/bin/ls: Argument list too long

bash - 有没有办法在Azure Pipeline中提取bash脚本的输出

bash - Bash:如何在sqlite3中插入具有特殊字符的文本?

linux - 如何通过 CLI 快速重命名 macOS 或 Linux 上的文件?