【发布时间】:2017-11-19 17:50:20
【问题描述】:
我需要一个 shell 脚本来在文件中查找一个字符串,如下所示: 文件名_1.00_r0102.tar.gz 然后从多次出现的值中选择最大值。
我对文件名的“1.00”部分感兴趣。 我可以使用以下命令在 UNIX shell 中单独获取这部分:
find /directory/*.tar.gz | cut -f2 -d'_' | cut -f1 -d'.'
1
2
3
1
find /directory/*.tar.gz | cut -f2 -d'_' | cut -f2 -d'.'
00
02
05
00
问题是这个字符串有多个文件:
文件名_1.01_r0102.tar.gz
文件名_2.02_r0102.tar.gz
文件名_3.05_r0102.tar.gz
文件名_1.00_r0102.tar.gz
我需要选择具有 FileName_("最高值")_r0102.tar.gz 的文件
但由于我是 shell 脚本的新手,所以我无法弄清楚如何在脚本中处理这些多个实例。
我为整数部分想出的脚本如下:
#!/bin/bash
for file in /directory/*
file_version = find /directory/*.tar.gz | cut -f2 -d'_' | cut -f1 -d'.'
done
OUTPUT: file_version:command not found
请帮助。 谢谢!
【问题讨论】:
-
这不是答案,只是尝试识别语法错误,以便下次避免它们:1)您需要在 for 循环中使用
do:for .... ;do .... ;done2)当您设置了一个变量,等号周围不能有空格:file_version=5, notfile_version = 53) 要设置一个包含命令输出的变量,您需要 command substitution:@987654329 @ 4) 不是语法错误,但引用变量赋值的 RHS 是个好主意:file_version="$(command)". -
以上建议很好,但不要让我们为您检查脚本的语法,学习使用shellcheck.net。你知道
head和tailcmds。如果您可以强制对输出进行排序,那应该会有所帮助。祝你好运。 -
非常感谢,@Nick!
-
@shellter 这是我第一次编写脚本。 shellcheck.net 真的很有用。谢谢!!
标签: shell scripting debian-based