操作文件netstat.txt格式如下:
[search@CJ-0140 ~]$ head netstat.txt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 52 10.10.0.149:ssh 10.100.100.2:59733 ESTABLISHED
tcp 0 0 42.62.37.149:27466 202.104.143.5:http ESTABLISHED
tcp 0 0 localhost.localdomain:42992 localhost.localdomain:13222 ESTABLISHED
tcp 0 0 localhost.localdomain:8495 localhost.localdom:palace-2 ESTABLISHED
tcp 0 0 42.62.37.149:jesmsjc 202.104.143.5:http ESTABLISHED
tcp 0 0 42.62.37.149:27458 202.104.143.5:http ESTABLISHED
tcp 0 0 42.62.37.149:27459 202.104.143.5:http ESTABLISHED
tcp 0 0 localhost.localdomain:6280 localhost.localdomain:11582 ESTABLISHED
[search@CJ-0140 ~]$ awk '$3==52 {print $1}' netstat.txt
tcp
1.被单引号中被大括号包括的是awk语句,其只能被单引号包括。$1表示第一个字段,$0表示整行记录,前面的$3==52是判断输出条件。
2.也可以格式化输出对象:
[search@CJ-0140 ~]$ awk '$3==52 {printf "%8s %3s %4s %7s\n" ,$1,$2,$3,$4}' netstat.txt
tcp 0 52 10.10.0.149:ssh
[search@CJ-0140 ~]$ awk '$3==52 {printf "%2s %3s %4s %7s\n" ,$1,$2,$3,$4}' netstat.txt
tcp 0 52 10.10.0.149:ssh
3.过滤记录:若有关于字符串的判断需要用双引号,否则会查不到结果。NR为行号,NR==1表示第一行。
[search@CJ-0140 ~]$ awk '$3==0 && $6=='ESTABLISHED'' netstat.txt
[search@CJ-0140 ~]$ awk '$3==0 && $6=="ESTABLISHED"' netstat.txt
tcp 0 0 42.62.37.149:27466 202.104.143.5:http ESTABLISHED
tcp 0 0 localhost.localdomain:42992 localhost.localdomain:13222 ESTABLISHED
tcp 0 0 localhost.localdomain:8495 localhost.localdom:palace-2 ESTABLISHED
tcp 0 0 42.62.37.149:jesmsjc 202.104.143.5:http ESTABLISHED
tcp 0 0 42.62.37.149:27458 202.104.143.5:http ESTABLISHED
tcp 0 0 42.62.37.149:27459 202.104.143.5:http ESTABLISHED
[search@CJ-0140 ~]$ awk '$3==0 && $6=="ESTABLISHED" ||NR==1' netstat.txt
Active Internet connections (w/o servers)
tcp 0 0 42.62.37.149:27466 202.104.143.5:http ESTABLISHED
tcp 0 0 localhost.localdomain:42992 localhost.localdomain:13222 ESTABLISHED
tcp 0 0 localhost.localdomain:8495 localhost.localdom:palace-2 ESTABLISHED
tcp 0 0 42.62.37.149:jesmsjc 202.104.143.5:http ESTABLISHED
tcp 0 0 42.62.37.149:27458 202.104.143.5:http ESTABLISHED
4.关于awk的内建变量如下:
$0 | 这个变量保存整行记录(当前记录) |
$1~~$n | 表示记录的各个字段 |
FS | 字段间的分隔符,默认是空格或者tab |
NF | 一行有多少个字段 |
NR | 已经输出的记录数,从1开始,要是有多个文件,改值一直累加 |
FNR | 当前记录数,这个值只跟当前文件有关系,即文件中的行号 |
RS | 输入记录分隔符,默认是换行符 |
OFS | 输出字段间的分隔符,默认为空格 |
ORS | 输出记录分隔符,默认是换行符 |
FILENAME | 当前输入文件名字 |
指定分隔符:
[search@CJ-0140 ~]$ awk 'BEGIN{FS" "} $3==52 {printf "%2s %3s %4s %4s\n" ,$1,$2,$3,$4}' netstat.txt
tcp 0 52 10.10.0.149:ssh
[search@CJ-0140 ~]$ awk -F' ' '$3==52 {printf "%2s %3s %4s %4s\n" ,$1,$2,$3,$4}' netstat.txt
tcp 0 52 10.10.0.149:ssh
所以还是-F方便,用单引号指定分隔符,若用FS还要在BEGIN中,另外分隔符要用双引号
指定输出分隔符:
[search@CJ-0140 ~]$ awk -F' ' '$3==52 {print $1,$2,$3,$4}' netstat.txt
tcp 0 52 10.10.0.149:ssh
[search@CJ-0140 ~]$ awk -F' ' '$3==52 {print $1,$2,$3,$4}' OFS='\t' netstat.txt
tcp 0 52 10.10.0.149:ssh
打印行号:
[search@CJ-0140 ~]$ awk -F' ' '$3==52 {print NR,FNR,$1,$2,$3,$4}' OFS='\t' netstat.txt
3 3 tcp 0 52 10.10.0.149:ssh
5.字符串匹配
[search@CJ-0140 ~]$ awk '$6 ~/CLOSE/ {print NR,FNR,$1,$2,$3,$4,$5,$6}' netstat.txt
25 25 tcp 1 0 10.10.0.149:23617 10.10.0.100:22121 CLOSE_WAIT
26 26 tcp 1 0 10.10.0.149:11476 10.10.0.100:22121 CLOSE_WAIT
34 34 tcp 1 0 10.10.0.149:28521 10.10.0.100:22121 CLOSE_WAIT
56 56 tcp 1 0 10.10.0.149:13314 10.10.0.100:22121 CLOSE_WAIT
[search@CJ-0140 ~]$ awk '$6 ~/close/ {print NR,FNR,$1,$2,$3,$4,$5,$6}' netstat.txt
表示匹配第六个字段中包含‘CLOSE’的记录,大小写区别对待,~表示开始模式匹配开始,//双斜杠之间的内容表示要匹配的内容。其实就是一个正则匹配。
再举几个例子如下:
5.1 '|'表示或
[search@CJ-0140 ~]$ awk '$6 ~/close|EST/ {print NR,FNR,$1,$2,$3,$4,$5,$6}' netstat.txt
3 3 tcp 0 52 10.10.0.149:ssh 10.100.100.2:59733 ESTABLISHED
4 4 tcp 0 0 42.62.37.149:27466 202.104.143.5:http ESTABLISHED
5 5 tcp 0 0 localhost.localdomain:42992 localhost.localdomain:13222 ESTABLISHED
6 6 tcp 0 0 localhost.localdomain:8495 localhost.localdom:palace-2 ESTABLISHED
7 7 tcp 0 0 42.62.37.149:jesmsjc 202.104.143.5:http ESTABLISHED
8 8 tcp 0 0 42.62.37.149:27458 202.104.143.5:http ESTABLISHED
9 9 tcp 0 0 42.62.37.149:27459 202.104.143.5:http ESTABLISHED
10 10 tcp 0 0 localhost.localdomain:6280 localhost.localdomain:11582 ESTABLISHED
11 11 tcp 0 0 localhost.localdomain:33334 localhost.localdomain:21311 ESTABLISHED
12 12 tcp 0 0 localhost.localdomain:18880 localhost.localdomain:33333 ESTABLISHED
13 13 tcp 0 0 42.62.37.149:27456 202.104.143.5:http ESTABLISHED
5.2 像grep用法一样查找包含字符串的行,只不过是把要匹配内容放到'/******/' 之中而已。
[search@CJ-0140 ~]$ awk '/CLOSE/' netstat.txt
tcp 1 0 10.10.0.149:23617 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:11476 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:28521 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:13314 10.10.0.100:22121 CLOSE_WAIT
[search@CJ-0140 ~]$ grep CLOSE netstat.txt
tcp 1 0 10.10.0.149:23617 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:11476 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:28521 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:13314 10.10.0.100:22121 CLOSE_WAIT
5.3模式取反,在模式开始时加上!
[search@CJ-0140 ~]$ awk '$6 !~ /CLOSE|EST/ {print NR,FNR,$1,$2,$3,$4,$5,$6}' netstat.txt
1 1 Active Internet connections (w/o servers)
2 2 Proto Recv-Q Send-Q Local Address Foreign
85 85 Active UNIX domain sockets (w/o servers)
86 86 Proto RefCnt Flags Type State I-Node
87 87 unix 2 [ ] DGRAM 8200
88 88 unix 2 [ ] DGRAM 12138
89 89 unix 2 [ ] DGRAM 10931
90 90 unix 6 [ ] DGRAM 1896021751
91 91 unix 3 [ ] STREAM CONNECTED
92 92 unix 3 [ ] STREAM CONNECTED
[search@CJ-0140 ~]$ awk '$6 ~ /CLOSE|EST/ {print NR,FNR,$1,$2,$3,$4,$5,$6}' netstat.txt
3 3 tcp 0 52 10.10.0.149:ssh 10.100.100.2:59733 ESTABLISHED
4 4 tcp 0 0 42.62.37.149:27466 202.104.143.5:http ESTABLISHED
5 5 tcp 0 0 localhost.localdomain:42992 localhost.localdomain:13222 ESTABLISHED
6 6 tcp 0 0 localhost.localdomain:8495 localhost.localdom:palace-2 ESTABLISHED
7 7 tcp 0 0 42.62.37.149:jesmsjc 202.104.143.5:http ESTABLISHED
8 8 tcp 0 0 42.62.37.149:27458 202.104.143.5:http ESTABLISHED
9 9 tcp 0 0 42.62.37.149:27459 202.104.143.5:http ESTABLISHED
10 10 tcp 0 0 localhost.localdomain:6280 localhost.localdomain:11582 ESTABLISHED
11 11 tcp 0 0 localhost.localdomain:33334 localhost.localdomain:21311 ESTABLISHED
6.拆分文件.以第六个字段拆分文件,并以第六个字段为文件名
[search@dbl-vm-211-13 algorithm]$ awk 'NR>=3 && NR<=84 {print > $6}' netstat.txt
[search@dbl-vm-211-13 algorithm]$ ll
total 52
-rwxrwxr-x 1 search search 7338 Aug 21 10:05 a.out
-rwxrwxr-x 1 search search 9098 Aug 21 15:26 bub
-rw-rw-r-- 1 search search 1103 Aug 20 17:15 bubblesort.cpp
-rw-rw-r-- 1 search search 356 Jan 23 12:33 CLOSE_WAIT
-rw-rw-r-- 1 search search 6942 Jan 23 12:33 ESTABLISHED
-rw-rw-r-- 1 search search 10819 Jan 23 12:27 netstat.txt
drwxrwxr-x 14 search search 4096 Oct 12 17:24 yuanma
[search@dbl-vm-211-13 algorithm]$ wc -l CLOSE_WAIT
4 CLOSE_WAIT
[search@dbl-vm-211-13 algorithm]$ wc -l ESTABLISHED
78 ESTABLISHED
查看文件内容:
[search@dbl-vm-211-13 algorithm]$ head CLOSE_WAIT
tcp 1 0 10.10.0.149:23617 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:11476 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:28521 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:13314 10.10.0.100:22121 CLOSE_WAIT
[search@dbl-vm-211-13 algorithm]$ head ESTABLISHED
tcp 0 52 10.10.0.149:ssh 10.100.100.2:59733 ESTABLISHED
tcp 0 0 42.62.37.149:27466 202.104.143.5:http ESTABLISHED
tcp 0 0 localhost.localdomain:42992 localhost.localdomain:13222 ESTABLISHED
tcp 0 0 localhost.localdomain:8495 localhost.localdom:palace-2 ESTABLISHED
6.1也可以指定列输出到文件
[search@dbl-vm-211-13 algorithm]$ awk 'NR>=3 && NR<= 84 {print $1,$2,$3,$4 > $6}' netstat.txt
[search@dbl-vm-211-13 algorithm]$ ll
total 48
-rwxrwxr-x 1 search search 7338 Aug 21 10:05 a.out
-rwxrwxr-x 1 search search 9098 Aug 21 15:26 bub
-rw-rw-r-- 1 search search 1103 Aug 20 17:15 bubblesort.cpp
-rw-rw-r-- 1 search search 104 Jan 23 12:41 CLOSE_WAIT
-rw-rw-r-- 1 search search 2423 Jan 23 12:41 ESTABLISHED
-rw-rw-r-- 1 search search 10819 Jan 23 12:27 netstat.txt
drwxrwxr-x 14 search search 4096 Oct 12 17:24 yuanma
[search@dbl-vm-211-13 algorithm]$ head CLOSE_WAIT
tcp 1 0 10.10.0.149:23617
tcp 1 0 10.10.0.149:11476
tcp 1 0 10.10.0.149:28521
tcp 1 0 10.10.0.149:13314
6.2 在awk中使用if-else -if语句来分拆文件
[search@dbl-vm-211-13 algorithm]$ awk ' {if($6 ~ /CONNE/) print >"1.txt";else if($6 ~/CLOSE/) print >"2.txt"}' netstat.txt
[search@dbl-vm-211-13 algorithm]$ ll
total 56
-rw-rw-r-- 1 search search 1880 Jan 23 12:57 1.txt
-rw-rw-r-- 1 search search 356 Jan 23 12:57 2.txt
-rwxrwxr-x 1 search search 7338 Aug 21 10:05 a.out
-rwxrwxr-x 1 search search 9098 Aug 21 15:26 bub
-rw-rw-r-- 1 search search 1103 Aug 20 17:15 bubblesort.cpp
-rw-rw-r-- 1 search search 104 Jan 23 12:41 CLOSE_WAIT
-rw-rw-r-- 1 search search 2423 Jan 23 12:41 ESTABLISHED
-rw-rw-r-- 1 search search 10819 Jan 23 12:27 netstat.txt
drwxrwxr-x 14 search search 4096 Oct 12 17:24 yuanma
[search@dbl-vm-211-13 algorithm]$ cat 2.txt
tcp 1 0 10.10.0.149:23617 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:11476 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:28521 10.10.0.100:22121 CLOSE_WAIT
tcp 1 0 10.10.0.149:13314 10.10.0.100:22121 CLOSE_WAIT
[search@dbl-vm-211-13 algorithm]$ cat 1.txt
unix 3 [ ] STREAM CONNECTED 1905375791
unix 3 [ ] STREAM CONNECTED 1905375790
unix 2 [ ] STREAM CONNECTED 1391276691
unix 2 [ ] STREAM CONNECTED 360985513
7.统计应用,统计所有txt文件的大小总和。
[search@dbl-vm-211-13 algorithm]$ ll *.txt
-rw-rw-r-- 1 search search 1880 Jan 23 12:57 1.txt
-rw-rw-r-- 1 search search 356 Jan 23 12:57 2.txt
-rw-rw-r-- 1 search search 10819 Jan 23 12:27 netstat.txt
[search@dbl-vm-211-13 algorithm]$ ll *.txt |awk '{sum += $5} END{print sum}'
13055
统计中运用数组更为方便:统计第六个字段在文件中出现的次数,并按照次数排序,从大到小排列。在END中巧妙利用for循环。sort -k 3 是对第三列排序,-g表示按照数值大小排序,-r表示逆序,-n表示按照数值字符排序。
[search@dbl-vm-211-13 algorithm]$ awk 'NR!=1 {a[$6]++} END{for(i in a) print i,",",a[i]}' netstat.txt |sort -g -r -k 3
ESTABLISHED , 78
CONNECTED , 28
CLOSE_WAIT , 4
servers) , 1
I-Node , 1
Foreign , 1
统计每个用户内存占用情况
[search@dbl-vm-211-13 algorithm]$ ps -aux |awk '{a[$1]+=$6} END{for(i in a) print i,",",a[i]}' |sort -g -r -k3
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root , 20176
search , 6796
68 , 1636
ganglia , 1180
8.awk中BEGIN 和END的使用
以score.txt文件为例
[search@dbl-vm-211-13 algorithm]$ cat score.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
[search@dbl-vm-211-13 algorithm]$ cat score.awk
#!/bin/awk -f
BEGIN{
math=0
english=0
chinese=0
printf "name no. math englishs chineses total\n"
printf "-------------------------------------------------------------\n"
}
{
math +=$3
english +=$4
chinese +=$5
printf "%s\t%s\t%d\t%d\t%d\t%d\n",$1,$2,$3,$4,$5,$3+$4+$5
}
END{
printf "-------------------------------------------------------------\n"
printf " TOTAL:%10d %8d %8d\n", math,english,chinese
printf " AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, chinese/NR
}
执行结果:
[search@dbl-vm-211-13 algorithm]$ ./score.awk score.txt
name no. math englishs chineses total
-------------------------------------------------------------
Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159
-------------------------------------------------------------
TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.00
9.与环境变量交互,就是把环境变量的值作为参数传进awk中
使用-v参数即可
[search@dbl-vm-211-13 algorithm]$ awk '{print $3}' score.txt
78
66
48
87
40
[search@dbl-vm-211-13 algorithm]$ export x=10
[search@dbl-vm-211-13 algorithm]$ awk -v val=$x '{print $3+val}' score.txt
88
76
58
97
50
10.几个不常用的用法
10.1根据每行内容长度,选择输出
[search@dbl-vm-211-13 algorithm]$ awk 'length > 88 {print $6}' netstat.txt
12138
从文件中找出大于88的行。
[search@dbl-vm-211-13 algorithm]$ awk 'length > 88' netstat.txt
unix 2 [ ] DGRAM 12138 @/org/freedesktop/hal/udev_event
10.2 按照链接数查看客户端ip
先查看所有的tcp udp 的链接情况,
[search@CJ-0140 ~]$ netstat -antu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:8139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:12683 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:13452 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:45678 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:13332 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:33333 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:20277 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:33334 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11582 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11583 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:13442 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:10277 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:13222 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:12008 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8649 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11050 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3914 0.0.0.0:* LISTEN
tcp 0 0 42.62.37.149:21961 202.104.143.5:80 ESTABLISHED
tcp 0 0 42.62.37.149:21956 202.104.143.5:80 ESTABLISHED
tcp 0 0 127.0.0.1:42992 127.0.0.1:13222 ESTABLISHED
tcp 0 0 127.0.0.1:8495 127.0.0.1:9993 ESTABLISHED
取出远程链接ip和端口
[search@CJ-0140 ~]$ netstat -antu |awk '{print $5}'
and
Address
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
202.104.143.5:80
127.0.0.1:13222
127.0.0.1:9993
202.104.143.5:80
202.104.143.5:80
获取ip
[search@CJ-0140 ~]$ netstat -antu |awk '{print $5}' |cut -d: -f1
and
Address
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
10.10.192.50
127.0.0.1
127.0.0.1
202.104.143.5
202.104.143.5
先排序
[search@CJ-0140 ~]$ netstat -antu |awk '{print $5}' |cut -d: -f1|sort
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
10.10.0.100
10.10.0.100
10.10.0.100
10.10.0.100
10.10.0.100
10.10.0.100
10.10.0.100
10.10.0.100
10.10.0.100
10.10.0.100
10.100.100.121
10.10.192.11
10.10.192.175
去重并计数
[search@CJ-0140 ~]$ netstat -antu |awk '{print $5}' |cut -d: -f1|sort|uniq -c
23
37 0.0.0.0
10 10.10.0.100
1 10.100.100.121
1 10.10.192.11
1 10.10.192.175
1 10.10.192.30
1 10.10.192.84
1 10.10.64.172
32 127.0.0.1
24 202.104.143.5
1 Address
1 and
按链接数排序,sort默认按照第一列排序
[search@CJ-0140 ~]$ netstat -antu |awk '{print $5}' |cut -d: -f1|sort|uniq -c|sort -nr
37 0.0.0.0
32 127.0.0.1
24 202.104.143.5
23
10 10.10.0.100
3 10.10.192.50
1 and
1 Address
1 10.10.64.172
1 10.10.192.84
1 10.10.192.30
1 10.10.192.175
1 10.10.192.11
1 10.100.100.121
10.3打印99乘法表
[search@CJ-0140 ~]$ seq --help
Usage: seq [OPTION]... LAST
or: seq [OPTION]... FIRST LAST
or: seq [OPTION]... FIRST INCREMENT LAST
Print numbers from FIRST to LAST, in steps of INCREMENT.
[search@CJ-0140 ~]$ seq 9
1
2
3
4
5
6
7
8
9
[search@CJ-0140 ~]$ seq 1 2 9
1
3
5
7
9
[search@CJ-0140 ~]$ seq 3 |sed 'H;'
1
2
3
[search@CJ-0140 ~]$ seq 3 |sed 'H;g'
1
1
2
1
2
3
[search@CJ-0140 ~]$ seq 9 |sed 'H;g'|awk '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}' RS=''
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
NF表示列数,NR表示行数
RS表示输入记录的分隔符,默认为换行符,现在改为空格。