删除某一行
1 | [zpxu@node102 ~]$ cat fkjsaf |
删除列数小于N的行
1 | [zpxu@node102 ~]$ awk '{if(NF==1){next} print $0}' fkjsaf |
删除空行
1 | [zpxu@node102 ~]$ cat text |
不输出后两列
1 | cat file |
不输出前两列
1 | awk '{for(i=3;i<NF;i++)printf("%s ",$i);print $NF}' file |
文件1和文件2交集部分合并输出
1 | cat a.txt //a.txt |
解释
当NR和FNR相同时,这就说明在对第一个文件进行操作,a[$1]=$2
表示,建立一个数组,以第一个字段为下标,第二个字段为值。当NR!=FNR时,说明在对第二个文件进行操作,注意:这个时候的,$1
和前面的$1不是同一个东西了,前面的$1
表示的是a.txt的第一个字段,而后面的$1
表示的是b.txt的第一个字段。a[$1]
表示以b.txt中第一个字段的为下标的值,如果a[$1]有值的话,说明也存在于a.txt文件中,这样就把数据print出来就行了。1
2
3
4#方法2
awk -v OFS="," 'NR==FNR{a[$1]=$2;} NR!=FNR && $1 in a { print $1,a[$1],$2,$3}' a.txt b.txt
111,aaa,123,456
444,ddd,rts,786
解释
-v OFS=”,”这个是设置输出时的列分割符,$1 in a
这个是b.txt文件中的第一列的值是不是在数组a的key中,这个对做程序的来说很好理解,各种语言当中都有这样的用法,或者函数。