gpt4 book ai didi

linux - 如何使这个 AWK 命令不区分大小写?

转载 作者:行者123 更新时间:2023-12-03 09:53:51 25 4
gpt4 key购买 nike

我正在尝试仅使用 awk 命令打印 .csv 文件中出现的字段。例如在文件 test.csv 中,如下所示:

layla;rebel;TAT
han_solo;rebel;TAT
darth_vader;empire;DKS
yoda;rebel;TAT

使用命令:

cat test.csv | ./how_many_are_we.sh dks

我希望有以下输出:

1

这是我在 how_many_are_we.sh 中的代码(可以工作但区分大小写):

#! /bin/bash
awk -F ";" -v location=$1 'BEGIN {count=0;} { if ($3 == location) count+=1} END {print count}'

我尝试在不同的地方添加 IGNORECASE=1,但我似乎无法找到使其工作的正确方法。

请原谅我用词不当,感谢您的帮助。

最佳答案

您可以将输入值的大小写和第 3 个字段更改为小写,然后比较它们的值以确保它们输入的比较不受影响。

#!/bin/bash
awk -F ";" -v location="$1" 'BEGIN {location=tolower(location);count=0;} { if (tolower($3) == location) count+=1} END {print count+0}' Input_file

或者根据 Glenn sir 的评论,使用 shell 技巧使其在变量本身中变为小写。

#!/bin/bash
awk -v location="${1,,}" 'BEGIN{FS=";"} (tolower($3) == location){count+=1} END{print count+0}' Input_file


或更多 awksh 方式改变 awk 命令如下(上面是 OP 的命令修复这是使它成为 awksh 风格)

awk -v location="$1"'BEGIN{location=tolower(location);FS=";"} (tolower($3) == location){count+=1} END{print count+0 }'


注意: 要使用 IGNORECASE=1,您应该在 BEGIN 部分提及它,例如 BEGIN{IGNORECASE=1} 或类似于 awk 变量 -v IGNORECASE="1"

还有一个旁注,OP 的 shebang 在 #!/bin/bash 之间有空格,这不应该是这种情况所以我也在这里修复了这个问题.

关于linux - 如何使这个 AWK 命令不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63886406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com