我想使用Bash脚本比较来自两个不同文件的2个数字。该文件是tmp $ i和tmp $(($ i-1))。我试过下面的脚本不能正常工作
#!/bin/bash
for i in `seq 1 5`
do
if [ $tmp$i -lt $tmp$(($i-1)) ];then
cat tmp$i >> inf
else
cat tmp$i >> sup
fi
done
样本数据
Tmp1:
0.8856143905954186 0.8186070632371812 0.7624440603372680 0.7153352945456424 0.6762383806114797 0.6405457936981878
TMP2:
0.5809579333203458 0.5567050091247218 0.5329405222386163 0.5115305043007474 0.4963898045543342 0.4846139486344327
答案 0 :(得分:0)
您没有设置$tmp
,因此您最终只是简单地比较i
是否小于i-1
当然不是tmp2
。
删除美元符号名义上修复了这一点,但只会比较两个字符串(数字基数没有明确定义,因此在实践中,总是假),不能访问名为这些字符串的文件的内容。 tmp1
既不大也不小于test ... -lt
。 (Bash可以执行词法比较,但if [ $(cat "tmp$i") -lt $(cat "tmp$((i - 1))") ]; then
不是执行此操作的工具。)
请改为尝试:
exit(0)
为了回应您想要对十进制数执行此操作的观察,您需要一个不同的工具,因为Bash仅支持整数运算。我的方法是编写一个简单的Awk脚本来执行比较。
为了能够将其用作条件,如果条件为真,它应exit(1)
,否则smaller_first_line () {
awk 'NR==1 && FNR==1 { i=$1; next } FNR==1 { exit($1 < i) }' "$1" "$2"
}
if smaller_first_line "tmp$i" "tmp$((i - 1))"; then
:
。
为了保持主脚本的可读性,我将其封装在一个函数中,如下所示:
{{1}}