- 论坛徽章:
- 6
|
回复 22# xiaochuanjiejie
可以讲解下 '!a[$4$3$2$1]++;{a[$1$2$3$4]++}' 的含义吗,谢谢
awk '1' file # 永远打印file中awk当前读到的记录.
awk '1;{}' file #永远打印file中awk当前读到的记录,然后执行{}中的内容,但 {}中为空,所以什么也没有执行。
awk '!1;{}' file #永远不打印file中awk当前读到的记录,然后执行{}中的内容,但 {}中为空,所以什么也没有执行。
awk '!a;{a=1}' file #如果a为0或空则打印awk当前读到的记录,否者不打印,不管打印还是不打印,都执行{}中的a=1.
awk '!a[$4$3$2$1];{a[$1$2$3$4]=1}' file
如果awk读到file第一记录是 “a b c d”,则 a[$4$3$2$1] == a[dcba],由于a[dcba]是第 一次出现,所以是为空,所以!a[$4$3$2$1] == 1, 打印该行 a b c d,然后执行a[$1$2$3$4]=1,即a[abcd]=1。
然后awk继续读file的第二条记录。如果第二条记录是 “d c b a”,则 a[$4$3$2$1] == a[abcd],由于a[abcd]这个数组(严格说叫散列)在读第一条记录时已经赋值为1,所以!a[$4$3$2$1] == 0,当前读到的这第二条记录就不被打印。
awk '!a[$4$3$2$1]++;{a[$1$2$3$4]++}' file 同理。
|
|