1、关于linux的空格分隔:
结论:按1个空格分隔的话,可以连续任意多个空格当做一个看待;按两个空格的话就只能是实际空格看待了。
示例:
[root@hadoopm ~]#more ss.txt #注:字母间隔分别为1、2、3、4、5个空格
a b c d e g
#测试单个空格分隔:
[root@hadoopm ~]#awk -F ' ' '{print $1}' ss.txt
a
[root@hadoopm ~]#awk -F ' ' '{print $2}' ss.txt
b
[root@hadoopm ~]#awk -F ' ' '{print $3}' ss.txt
c
[root@hadoopm ~]#awk -F ' ' '{print $4}' ss.txt
d
[root@hadoopm ~]#awk -F ' ' '{print $5}' ss.txt
e
[root@hadoopm ~]#awk -F ' ' '{print $6}' ss.txt
g
#测试两个空格分隔
[root@hadoopm ~]#awk -F ' ' '{print $1}' ss.txt
a b
[root@hadoopm ~]#awk -F ' ' '{print $2}' ss.txt
c
[root@hadoopm ~]#awk -F ' ' '{print $3}' ss.txt #结果为“1个空格+d”
d
[root@hadoopm ~]#awk -F ' ' '{print $4}' ss.txt #结果为空
[root@hadoopm ~]#awk -F ' ' '{print $5}' ss.txt
e
[root@hadoopm ~]#awk -F ' ' '{print $6}' ss.txt #结果为空
[root@hadoopm ~]#awk -F ' ' '{print $7}' ss.txt #结果为“1个空格+g”
g
2、awk在join关联上的用法
参考:http://lxw1234.com/archives/2016/03/621.htm
基本用法:尽管操作可能会很复杂,但命令的语法始终是: awk '{pattern + action}' 或者 awk 'pattern {action}'
Awk特殊变量 | 描述 |
$number | 表示记录的字段。比如,$1表示第1个字段,$2表示第2个字段,如此类推。而$0比较特殊,表示整个当前行 |
FS | 表示字段分隔符 |
NF | 表示当前记录中的字段数量 |
NR | 表示当前记录的编号(awk将第一个记录算作记录号1) |
awk可以指定同时读取多个文件,按照指定的先后顺序,逐个读取。
NR指的是Number Record Of ALL 的意思; FNR只的是Number Record Of One FILE 的意思。
示例:
[root@hadoopm ~]#more a.txt ##顺序打乱无影响
4,a-4
1,a-1
3,a-3
2,a-2
[root@hadoopm ~]#more b.txt
2,b-2
4,b-4
5,b-5
[root@hadoopm ~]#awk -F',' '{print NR,FNR,$0}' b.txt a.txt
1 1 2,b-2
2 2 4,b-4
3 3 5,b-5
4 1 4,a-4
5 2 1,a-1
6 3 3,a-3
7 4 2,a-2
[root@hadoopm ~]#awk -F',' 'NR==FNR{print "===="$0}NR!=FNR{print "!=!="$0}' b.txt a.txt
====2,b-2
====4,b-4
====5,b-5
!=!=4,a-4
!=!=1,a-1
!=!=3,a-3
!=!=2,a-2
[root@hadoopm ~]#awk -F',' 'NR==FNR{a[$1]=$2;}NR!=FNR{print $0,a[$1]}' b.txt a.txt
4,a-4 b-4
1,a-1
3,a-3
2,a-2 b-2