bash - Case insensitive comparision in If condition -
i have csv file , need count number of rows satisfies status row entry betwen year range , artist_name matches name argument. string matching should case insensitive. how accomplish in if loop..
i beginner, please bear me
#!/bin/bash file="$1" artist="$2" from_year="$(($3-1))" to_year="$(($4+1))" count=0 while ifs="," read arr1 arr2 arr3 arr4 arr5 arr6 arr7 arr8 arr9 arr10 arr11 ; if [[ $arr11 -gt $from_year ]] && [[ $arr11 -lt $to_year ]] && [[ $arr7 =~ $artist ]]; count=$((count+1)) fi done < "$file" echo $count
the $arr7 =~ $artist part need create modification
the bash
case-transformations (${var,,}
, ${var^^}
) introduced (some time ago) in bash version 4. however, if using mac os x, have bash v3.2 doesn't implement case-transformation natively.
in case, can lower-cased comparing less efficiently , lot more typing using tr
:
if [[ $(tr "[:upper:]" "[:lower:]" <<<"$arr7") = $(tr "[:upper:]" "[:lower:]" <<<"$artist") ]]; # ... fi
by way, =~
regular look comparison, not string comparison. wanted =
. also, instead of [[ $x -lt $y ]]
can utilize arithmetic compound command: (( x < y ))
. (in arithmetic expansions, not necessary utilize $
indicate variables.)
bash shell
No comments:
Post a Comment