NF表示域(列)的总数,是一个数值,这里的域默认用空格分隔。$NF当然表示变量了,指最后一个域内容。$NF查找过程是从右向左。 $NF表示最后一个域的内容,$(NF-1)表示倒数第二个域,同理$(NF-2)表示倒数第三个域。[wen@fedora ~]$ echo "abc def ghi jkl"|awk "{ print NF}" 4 [wen@fedora ~]$ echo "abc def ghi jkl"|awk "{ print $NF}" jkl [wen@fedora ~]$ echo "abc def ghi jkl"|awk "{ print $(NF-1)}" ghi [wen@fedora ~]$ echo "abc def ghi jkl"|awk "{ print $(NF-2)}" def [wen@fedora ~]$ echo "abc def ghi jkl"|awk "{ for (i=1;i<=NF;i++) print $i}" abc def ghi jkl 可以用-F指定分隔符。用-F后面的子串或字符作为域分隔符,仍然从右向左匹配分隔符。[wen@fedora ~]$ echo "abc def ghi jkl mno abc def abc mno"|awk -F "abc" "{ print $(NF)}" mno 当原始串中有多个子串与-F后的匹配串相同时,则匹配过程中再次遇到子串时截止查找。 示例:[wen@fedora ~]$ echo "abc def ghi jkl mno abc def abc mno"|awk -F "abc" "{ print $NF}" mno [wen@fedora ~]$ echo "abc def ghi jkl mno abc def abc mno"|awk -F "abc" "{ print $(NF-1)}" def [wen@fedora ~]$ echo "abc def ghi jkl mno abc def abc mno"|awk -F "abc" "{ print $(NF-2)}" def ghi jkl mno 由于NF是域的总数,可以用NF这个性质统计词频。 示例:[wen@fedora ~]$ echo "abc def ghi jkl mn abc def ghi abc def abc"|awk "{for(i=1;i<=NF;i++)arr[$i]++}{for(item in arr) print item"="arr[item]}" def=3 jkl=1 abc=4 ghi=2 mn=1 NR和NF相似,只是查找顺序与NF相反。NR是从左边开始匹配,从左向右查找。[wen@fedora ~]$ echo "abc def ghi jkl mn abc def ghi abc def abc"|awk -F "ghi" "{print $NR}" abc def 当有多个子串与-F内容相同时,NR从左到右查找原始串时,再次遇到-F内容时截止。如:[wen@fedora ~]$ echo "abc def ghi jkl"|awk -F "ghi" "{print $NR}" abc def [wen@fedora ~]$ echo "abc def ghi jkl mn"|awk -F "ghi" "{print $(NR+1)}" jkl mn [wen@fedora ~]$ echo "abc def ghi jkl mn abc def ghi abc def abc"|awk -F "ghi" "{print $(NR+1)}" jkl mn abc def 铁锈笔记2022-02-07