我有这个csv文件,我需要计算满足行条目在特定年份范围之间并且artist_name匹配name参数的条件的行数.但字符串匹配应该不区分大小写.我如何在if循环中实现它..
我是初学者,所以请耐心等待
#!/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 ; do if [[ $arr11 -gt $from_year ]] && [[ $arr11 -lt $to_year ]] && [[ $arr7 =~ $artist ]]; then count=$((count+1)) fi done < "$file" echo $count
$arr7 =〜$艺术家部分是我需要进行修改的地方
解决方法
bash case-transformations(${var,}和${var ^^})是在bash版本4中引入的(前一段时间).但是,如果你使用的是Mac OS X,那么你很可能有bash v3.2这本身并没有实现案例转换.
在这种情况下,您可以使用tr进行低效率的比较,并使用tr进行更多的输入:
if [[ $(tr "[:upper:]" "[:lower:]" <<<"$arr7") = $(tr "[:upper:]" "[:lower:]" <<<"$artist") ]]; then # ... fi
顺便说一句,=〜做正则表达式比较,而不是字符串比较.你几乎肯定想要=.另外,您可以使用算术复合命令代替[[$x -lt $y]] :((x
相关文章
转载注明原文:bash – If条件下不区分大小写的比较 - 代码日志
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。