将ls输出转换为整数
Converting ls output to an integer
我想从ls
输出中提取一组2位数的数字,并能够从中获得最大和最小的数字,以便以后使用。
我正在这样做:ls 14_data_*.log | egrep -o '[0-9]{2,2}' | head -1}
,但输出有时只是按升序,并且head
、tail
的预期返回错误的值。我试着把它转换成整数,但没有希望。
ls
返回了什么?如何处理?
ls
返回当前目录中的文件和目录列表。
我不知道你在做什么,但这里有一个使用sort
:解决问题的方法
降序:
ls 14_data_*.log | egrep -o '[0-9]{2}' | sort -nr
升序:
ls 14_data_*.log | egrep -o '[0-9]{2}' | sort -n
我真的不认为您需要在这里使用ls
。如果你确定你的文件名不包含换行符,你可以使用这个:
printf '%sn' 14_data_*.log | grep -Eo '[0-9]{2}'
然后将其管道传输到sort -n
,使用-r
反转排序顺序。
我认为这是一个XY问题。
我如何理解您想要什么:您在当前目录中有一些文件与glob 14_data_[0-9][0-9].log
匹配。您想要从glob [0-9][0-9]
中提取最小和最高的数字。
例如,给定列表
14_data_1.log
14_data_09.log
14_data_13.log
14_data_87.log
14_data_aa.log
您需要数字09
和87
,分别作为最小值和最大值。
这里有一个简单的纯Bash方法来实现这一点:
shopt -s nullglob
files=( 14_data_[0-9][0-9].log )
fnumbers=( "${files[@]#14_data_}" )
fnumbers=( "${fnumbers[@]%.log}" )
if (( ${#fnumbers[@]} == 0 )); then
echo "No files found."
else
printf 'min=%dnmax=%dn' "$((10#${numbers[0]}))" "$((10#${numbers[-1]}))"
fi
shopt -s nullglob
:如果没有匹配,则使globs扩展为空files=( 14_data_[0-9][0-9].log )
:用所有匹配的文件填充数组files
fnumbers=( "${files[@]#14_data_}" )
:用去掉前导14_data_
的files
字段填充数组fnumbers
fnumbers=( "${fnumbers[@]%.log}" )
:并从此数组中删除尾随的.log
此时,您有一个数组fnumbers
,它包含(在本例中):( 09 13 87 )
。
我们最后选择这个数组的第一个和最后一个元素,得到最低和最高的数字。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 如何在C++中将整数转换为其数字数组
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 将最小值整数转换为无符号长整型
- 为什么我们不能将使用异或运算找到的整数转换为字符?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 将74位整数转换为以31为底的整数
- 独立于实现的浮点/整数转换
- 以最少的步骤将给定整数转换为另一个整数
- 浮点到整数转换出错(即使浮点数已经是整数)
- 了解双精度转换与整数转换中的整数与截断关系
- 禁止具有精度损失的整数转换
- 将任意整数转换为 void*
- 将 32 位大端有符号整数转换为有符号小端整数
- char a[0] 使用 itoa() 将整数转换为字符串的目的
- 使用函数时从整数转换为字符串
- 尝试从整数转换为字符串的月份
- 如何在C++中将整数转换为字节,以便 Unity 在通过 UDP 传输后能够理解它们
- 如何将 Q 格式的整数转换为浮点数(反之亦然)
- 如何避免字符串到整数转换情况下的无效参数异常