unix shell script- jot -r 1 1 4 是什么意思?我可以用 seq 替换 jot 吗?

unix shell script- what does jot -r 1 1 4 mean? can I replace jot with seq?

我是 unix 和 shell 脚本的新手。 我正在编写一个脚本,将训练和测试图像文件名写入两个列表:

train.list
test.list

COUNT=-1
for folder in /*
do
    COUNT=$[$COUNT + 1]
    for imagesFolder in "$folder"/*
    do
        if (( $(jot -r 1 1 )  > 1 )); then
            echo "$imagesFolder" $COUNT >> train.list
        else
            echo "$imagesFolder" $COUNT >> test.list
        fi        
    done
done

我收到错误:

/convert_images_to_list.sh: line 31: jot: command not found

./convert_images_to_list.sh: line 31: ((: > 1 : syntax error: operand expected (error token is "> 1 ")

我试图将 jot 更改为 seq,但错误是:

eq: invalid option -- 'r'

./convert_images_to_list.sh: line 31: ((: > 1 : syntax error: operand expected (error token is "> 1 ")

我还检查了 'seq --help',上面写着 seq [OPTION]... FIRST INCREMENT LAST。 如果我想使用 seq 而不是 jot.

jot -r 1 1 &2 会被替换成什么

非常感谢。

jot -r 1 1 产生一个介于 1</code> 之间的随机数。您不能将其替换为 <code>seq。但是你可以用 shuf -i1- -n1 代替它 Ubuntu 应该有。

作为上述答案的替代方案,我可以通过将 jot -r 1 1 &2 替换为 for 循环来解决 select 将部分图像文件夹分为两个列表或类别的问题从数字序列到 select。

for imagesFolder in "$folder"/*
    do
        for t in $(seq 1 1 )
        do 
            if (( t  > 1 )); then
                echo "in train"
                echo "$imagesFolder" $COUNT >> train.list
            else
                echo "in test"
                echo "$imagesFolder" $COUNT >> test.list
            fi 
        done       
    done

您可能不需要 jotseq;你只是想生成一个介于 1 和 </code> 之间的随机整数。只要 <code> 不是太大并且您不太关心使用均匀分布,就可以将其替换为

# $RANDOM yields a value between 0 and 32767
# Thus, $RANDOM %  yields a value between 0 and  - 1
if (( $RANDOM %  > 0 )); then
    ...