[root@localhost awk]# seq 10|xargs -n 2 > file
[root@localhost awk]# seq 10 -1 1|xargs -n 2 > file1
xrags -n 2【表示每次批处理的数量为2个,默认的间隔为“ ”】
seq 10 -1 1【表示生成10个数字,逆序输出,步长为1】
[root@localhost awk]# cat file1
2 3
4 5
6 7
8 9
1 0
[root@localhost awk]# cat file |awk '{print $1}'
1
3
5
7
9
[root@localhost awk]# awk '{print NR}' file file1
1
2
3
4
5
6
7
8
9
10
[root@localhost awk]# awk '{print NR,FNR}' file file1
1 1
2 2
3 3
4 4
5 5
6 1
7 2
8 3
9 4
10 5
[root@localhost awk]#
[root@localhost awk]# awk 'NR==FNR{a[NR]=$1}NR!=FNR{print a[FNR],$2}' file file1
1 93 75 57 39 1
[root@localhost awk]#
awk的详解:
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
awk处理过程: 依次对每一行进行处理,然后输出
特殊要点:
$0 表示整个当前行
$1 每行第一个字段
NF 字段数量变量
NR 每行的记录号,多文件记录递增
FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
\t 制表符
\n 换行符
FS BEGIN时定义分隔符
RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~ 匹配,与==相比不是精确比较
!~ 不匹配,不精确比较
== 等于,必须全部相等,精确比较
!= 不等于,精确比较
&& 逻辑与
|| 逻辑或
+ 匹配时表示1个或1个以上
/[0-9][0-9]+/ 两个或两个以上数字
/[0-9][0-9]*/ 一个或一个以上数字
FILENAME 文件名
OFS 输出字段分隔符, 默认也是空格,可以改为制表符等
ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]' 定义三个分隔符
[root@localhost awk]# paste file3 file4
1 9
3 7
5 5
7 3
9 1
[root@localhost awk]# paste file3 file4|tr "\t" " "
1 9
3 7
5 5
7 3
9 1
paste 指令会把每个文件以列对列的方式,一列列地加以合并。
-d<间隔字符>或--delimiters=<间隔字符> 用指定的间隔字符取代跳格字符。
-s或--serial 串列进行而非平行处理。