一直不是很明白awk的数组、想问高人一下、a[$0]++、a[$0++]、a[$1]++、$[$1++]、还有a[NF++]、a[NF]++和a[NR++]、a[NR]++各用在什么地方、也就是在需要实现什么结果的时候用、最好举例说明、悬赏50份、谢谢啦
关于awk数组的问题、
awk是按行处理文本数据的。awk中的术语将一行称为一个记录;一个记录还可以根据分隔符分割为多个字段。0 表示整行内容(一个记录)a[$0]++用于分别统计不相同的记录个数。即,相同$0内容,个数累加。例子:文件1.txt内容为:111 abc 222 abc 333 efg 想得到如下结果(即统计第二个字段出...
awk中怎么取得数组的长度
方式1:用NF cat filename |awk -F'[_\\t]' '{print NF}'方式2:用split cat filename |awk '{len=split($0, arr, "[_\\t]")}{print len}'简单点,cat filename |awk '{print split($0, arr, "[_\\t]")}'
awk '{for(;i++<NF;)a[$i]++;for(i in a)print i" = "a[i]}' urfile...
首先awk是按行处理,告诉你一行是啥,后面的都是这么处理的。for(;i++<NF;),循环次数,NF即该行的字段个数;a[$i]++,数组的形式(以字段为下标的数组),表示一个数值,因为有++ for(i in a),这个不用多说了吧,循环的一种格式,i为变量,a为数组名 print i" = "a[i],就是输...
【awk】 '!a[$0]++'去重原理分析
开始分析!a[$0]++吧,不过还得先看一下awk中操作符的优先级(由高到低排列):这里我们可以将a[$0]数组取值替换为一个简单的变量,方便理解:我们知道a++操作符是在变量a使用完之后再对变量进行自增,所以这里虽然++比!优先级高,先跟变量a结合,但是不会立即自增变量a的值,而是在!a之后在自增...
awk巧妙去重
因为awk中对数组的要求不是很严格,居然字符串都可以做数组的下标,是的,很 奇特 。所以拿到初步的结果之后,使用如下的模式会巧妙的达到去重的效果。 awk '!($1 in a){a[$1]=1;print}' \/\/如果数组a中不含$1这个下标,则打印 ...
Awk 问题求助 (急)后面追加分
虽然没会你的语言,不过,看一下Split分割函数,提示说,分割第二个不是数组 n=split(var,var2,","); 第一句 n = split($3,var,"\/"); 第二句(问题可能出在这里)
...传入数组,打印数组长度报错attempt to use array `a (from a...
报错的意思是在一个期望标量值的场景下给了一个数组 你的脚本在Linux下面没有报错。修改为 F:\\work tmp\\test>awk 'function abc(a){print length(a)}{print length($0);abc($0)}'test 4 4 ok 2 2 hhh 3 3 后函数也是正常运行的,因此自定义函数没有问题。
awk '{a[$1]++}END{for (j in a) print a[j]"|"j}'
a[$1] 是一个关联数组,类似于c++中的map,其中$1的值是键,a[$1]对应的内容就是值,这个值如果是数字,则可以做加减运算。所以 a[$1]++ 就是指数组a中下标为$1对应的值增加1;for ( j in a) 是循环遍历数组a中键值对的用法,j就是依次获取数组a中的下标 ...
【50分】真心在线求教awk
否则shell无法正确辨识正则,产生错误的分割。 在此例中,awk 取单撇号里的正则进行解读,在[]之类的无需转义,且意义上相似于'\\[|\\]\\\/' , 即三个字符中的任一个出现,都当作分割符。2、a[$0] 在这里仅仅是初始化一下数组,以使这数组中的下标包含了当前的$0也即当前整行。在文件末处理时...
关于awk用法
man awk,看看asort函数的说明:asort(s [, d])the indexes of the sorted values of s are replaced with sequential integers starting with 1也就是说,数组下标会变掉。这是asort导致的 。用asort的时候使用第二个参数就可以了:If the optional destination array d is specified, then s is...