我在一个目录中有一堆输出文件,例如:a.out、b.out c.out 等。
我想搜索输出文件,如果输出文件名包含某个字符串(例如“a”),那么它会将相应的输出文件“a.out”打印到屏幕上。
在我 cd 进入输出文件目录后,这是我的代码:
OUT_FILE="*.out"
OT=$OUT_FILE
STRING="a"
for file in "$OT";do
if [[$file == *"$STRING"*]];then
echo $file
fi
done
Run Code Online (Sandbox Code Playgroud)
我收到的错误是 [[*.out: command not found。看起来 $file 被解释为 $OT,而不是与 $OT 匹配的单个文件。
但是当我删除 if 语句并只执行 for 循环来回显每个 $file 时,输出给了我所有以 .out 结尾的文件。
希望得到一些帮助以了解我做错了什么。提前致谢。
我想根据正则表达式时间戳模式将一个大文件(7.5MB)拆分为多个较小的文件,并且该文件中有 566 个时间戳:
大文件由多个数据块组成,每个块包含:时间戳+数据,看起来像这样(第1行是第一个时间戳):
12/20/2022 23:18:56
blah
blah
blah
blah
blah
blah
12/20/2022 23:23:56
blah
blah
blah
12/20/2022 23:28:56
blah
...
...
...
Run Code Online (Sandbox Code Playgroud)
每个较小的分割文件应该只包含一个时间戳和一个数据块,例如:
12/20/2022 23:23:56
blah
blah
blah
Run Code Online (Sandbox Code Playgroud)
我用来awk查找每个时间戳,一旦找到,每个时间戳+数据都会写入分割文件,直到找到下一个时间戳,然后创建下一个分割文件:
regex='([0-9]{2}\/[0-9]{2}\/[0-9]{4})'
awk -v regex=$regex '$0 ~ regex{x="split"++i}; i > 0 {print > x;}' $bigfile
Run Code Online (Sandbox Code Playgroud)
这非常有效(即文件 split1-252 正是我所期望的),直到awk遇到第 253 次出现的时间戳,然后出现错误:
awk: can't open file split253
source line number 1
Run Code Online (Sandbox Code Playgroud)
据我所知,第 253 个时间戳没有什么不同,因此我将第 253 个到第 566 个时间戳保存为一个新文件,因此新文件总共出现了 314 次时间戳模式,然后针对新文件重新运行我的代码文件。有趣的是,awk再次出错并显示完全相同的消息:
awk: can't open file split253
source line …Run Code Online (Sandbox Code Playgroud)