使用awk,我想在基于相同模式汇总行时忽略大小写敏感模式。
我有以下一行(非常感谢Andrey(https://stackoverflow.com/users/3476320/andrey)
awk '{n=$1;$1="";a[$0]+=n}END{for(i in a){print a[i], i}}' testing.txt
文件内容:
1 Used cars
12 Drivers
1 used cars
1 used cars
14 drivers
2 Used Cars
实际输出是
2 Used Cars
14 drivers
12 Drivers
2 used cars
1 Used cars
我需要的东西:
26 drivers/Drivers (doesn't matter)
5 used cars/Used Cars (doesn't matter)
谢谢!
答案 0 :(得分:1)
在程序的特定点执行不区分大小写的匹配的一种方法是使用tolower()或toupper()内置字符串函数将数据转换为单个大小写(我们还没有讨论过)但是;请参阅字符串函数)。例如:
tolower($1) ~ /foo/ { … }
另一种特定于gawk的方法是将变量IGNORECASE设置为非零值(请参阅内置变量)。当IGNORECASE不为零时,所有正则表达式和字符串操作都会忽略大小写。
另请注意:在awk $ 1中是第一个coloumn,$ 2是第二个... $ 0是整行。 (你不想用整行索引数组)
这适用于我的机器:
awk '{a[tolower($2) " " tolower($3)]+=$1;}END{for(i in a){print a[i], i}}' testing.txt
输出:
5 used cars
26 drivers
答案 1 :(得分:1)
也许是最简单的方法:
awk '{$0=tolower($0);n=$1;$1="";a[$0]+=n}END{for(i in a){print a[i], i}}' file