2017-11-09 16 views
0

配列項目に6桁の数字が含まれているかどうかをチェックするループを実行しようとしています。配列項目にbashの6桁が含まれているかどうかをチェックする方法

while read -a course; do 
    size=$[#course[@]] 
done < tmp2 
for ((j=1; j<=size; j++)); do 
    if ((${course[j]} != [0-9][0-9][0-9][0-9][0-9][0-9])); then 
     echo ${course[j]} 
    fi 
done 

whileループは、tmp2から配列に行を挿入します。

次に、各要素をチェックするためにforを使用し、6桁の数字がない場合はprintfだけを使用します。あらかじめtnx!

+0

'$ [#course [@]]'?多分あなたは '$ {#course [@]}'を望んでいたでしょうか?しかし、それは意味をなさない。なぜなら、ループが完了したときにファイルの最終行に行数しか格納されないからである(入力ファイルの各行に対して 'size'への代入を呼び出すたびに、前の行)。 –

+0

...なぜあなたは 'size'を全く格納していませんか?配列を直接反復することができます。 –

+0

ところで、ファイルの最初の行だけを読みたい場合、 'while'ループはまったく必要ありません。 'read -a courses

答えて

5
#!/usr/bin/env bash 
#    ^^^^- not /bin/sh 

re='^[[:digit:]]{6}$'     # store our regex in a variable 

while read -r -a courses; do    # for each line in the input file 
    for course in "${courses[@]}"; do  # ...for each column in the line... 
    if ! [[ $course =~ $re ]]; then  # ...if that column doesn't match our regex... 
     printf '%s\n' "$course"   # ...then print its contents. 
    fi 
    done 
done <tmp2 
+0

tnx。まだ、私は私のコードがうまくいかなかった理由についていくつかの入力が大好きです。私は何が間違っているのか知りたい。 – doronbs11

+0

その問題に関するコメントを参照してください。 –

関連する問題