这是在 bash 中进行浮点到整数转换的正确方法吗?有没有其他方法?
flotToint() {
printf "%.0f\n" "$@"
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个命令来限制从stdin.
我为此编写了一个小脚本(欢迎批评),但我想知道是否没有针对此简单且(我认为)常见用例的标准命令。
我的脚本找到了两个数字中的最小值:
#!/bin/bash
# $1 limit
[ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; }
read number
if [ "$number" -gt "$1" ]; then
echo "$1"
else
echo "$number"
fi
Run Code Online (Sandbox Code Playgroud) 假设我想比较gcc版本以查看系统是否安装了最低版本。
为了检查gcc版本,我执行了以下操作
gcc --version | head -n1 | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)
输出是
4.8.5
Run Code Online (Sandbox Code Playgroud)
所以,我写了一个简单的if语句来检查这个版本与其他一些值
if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then
echo "Less than 5.0.0"
else
echo "Greater than 5.0.0"
fi
Run Code Online (Sandbox Code Playgroud)
但它抛出一个错误:
[: integer expression expected: 4.8.5
Run Code Online (Sandbox Code Playgroud)
我理解我的错误,我使用字符串进行比较并且-lt需要整数。那么,有没有其他方法可以比较版本?
每行包含一列中的文本和数字。我需要计算每一行中数字的总和。我怎样才能做到这一点?谢谢
example.log 包含:
time=31sec
time=192sec
time=18sec
time=543sec
Run Code Online (Sandbox Code Playgroud)
答案应该是784
我正在检查我的主题的更新脚本
我有 2 个文本文件。第一个称为“current.txt”并包含当前版本。4.1.1该文本文件中有字符串。
第二个称为“latest.txt”并包含最新版本。4.2此文本文件中有字符串。
所以这是代码
echo "Checking update";
x=$(cat ./current.txt)
y=$(cat ./latest.txt)
if [ "$x" -eq "$y" ]
then
echo There is version $y update
else
echo Version $x is the latest version
fi
Run Code Online (Sandbox Code Playgroud)
这意味着如果 current.txt 与 latest.txt 不同,那么它会说“有 4.2 版更新”。如果不是,它会说“版本 4.1.1 是最新版本”
但是当我尝试运行它时。我收到这个错误
Checking update
./test.sh: line 4: [: 4.1.1: integer expression expected
Version 4.1.1 is the latest version
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?
我曾经comm比较两个排序的文件。这些文件中的每一行都是正整数。但结果显示
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
Run Code Online (Sandbox Code Playgroud)
即使这两个文件已排序,为什么会出现错误?
我正在编写一个星座 RSS 脚本作为 Unix/Linux 项目的介绍,但遇到了一个问题,我的教授无法在我下课后留下来解决这个问题。由于我无法弄清楚如何使用实际日期作为要检查的内容,因此我想通过让用户输入为 MMDD 格式的标准数字来尝试基本算术。据他说,该脚本似乎将输入读取为八进制代码而不是整数。这是脚本的示例:
elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ]
then
echo "You are Sagittarius"
exit
elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt 0100 ] && [ "$olddate" -lt 0120 ]
then
echo "You are Capricorn"
exit
Run Code Online (Sandbox Code Playgroud)
这是最基本的,我拿出了RSS部分。“olddate”是我阅读提示中的预期输入。虽然 1121 到 1131、1200 到 1222 和 0100 到 0120 有效,但 1221 到 …
我有一行(或多行)由任意字符分隔的数字。我可以使用哪些 UNIX 工具按数字对每一行的项目进行排序,同时保留分隔符?
例子包括:
10 50 23 42; 排序:10 23 42 5010.1.200.42; 排序:1.10.42.2001,100,330,42; 排序:1,42,100,330400|500|404; 排序:400|404|500由于分隔符是任意的,请随意使用您选择的单字符分隔符提供(或扩展)答案。
我有一个名为 Build.number 的文件,内容值为012,我需要将其增加 +1。所以,我试过这个
BN=$($cat Build.number)
BN=$(($BN+1))
echo $BN >Build.number
Run Code Online (Sandbox Code Playgroud)
但在这里,当我期待013时,我得到了值 11 。谁能帮我?
我有一个带有标签计数的基因组数据文件,我想知道一次代表了多少:
$ grep "^1" file |wc -l
Run Code Online (Sandbox Code Playgroud)
包括所有以 1 开头的行,因此它包括表示 10 次、11 次、100 次、1245 次等的标签。我该怎么做?
Current format
79 TGCAG.....
1 TGCAG.....
1257 TGCAG.....
1 TGCAG......
Run Code Online (Sandbox Code Playgroud)
我只想要以下几行:
1 TGCAG.....
Run Code Online (Sandbox Code Playgroud)
所以它不能包含以 1257 开头的行。注意:上面的文件是制表符分隔的。
numeric-data ×10
bash ×3
shell-script ×3
sort ×2
test ×2
arithmetic ×1
awk ×1
comm ×1
grep ×1
linux ×1
printf ×1
scripting ×1
string ×1
version ×1