转自 awk技巧(如取某一行数据中的倒数第N列等) - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/8481965.html
使用awk取某一行数据中的倒数第N列:$(NF-(n-1))
比如取/etc/passwd文件中的第2列、倒数第1、倒数第2、倒数第4列(以冒号为分隔符)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@ipsan-node06 ~]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologin[root@ipsan-node06 ~]# awk -F":" '{print $2,$(NF),$(NF-1),$(NF-3)}' /etc/passwdx /bin/bash /root 0x /sbin/nologin /bin 1x /sbin/nologin /sbin 2x /sbin/nologin /var/adm 4x /sbin/nologin /var/spool/lpd 7x /bin/sync /sbin 0x /sbin/shutdown /sbin 0x /sbin/halt /sbin 0x /sbin/nologin /var/spool/mail 12x /sbin/nologin /root 0 |
linux实现将文本文件每一行中相同第一列对应的其他列进行拼接
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@jump-v4 ~]# sort b.txt|uniq1 341 492 452 483 543 573 89[root@jump-v4 ~]# sort b.txt|uniq|awk '{a[$1]=(a[$1]" "$2);} END{for(i in a) print i ":"a[i]}' 1: 34 492: 45 483: 54 57 89命令解析:1)首先sort test|uniq实现对test文件的去重,去掉了重复的 1 49,保留不同的行;2)awk '{a[$1]=(a[$1]" "$2);} END{for(i in a) print i ":"a[i]}' 表示的含义是: 将每一行的第一列最为数组a的key, 第二列作为a的value,同时碰到相同的key,就把其值进行拼接,linux的shell的字符串拼接形式为str = (str “ ” $var), 最后遍历数组a,其中i为数组a的每一个key,a[i]为key对应的值; |
使用awk命令获取文本的某一行,某一列的技巧:
|
1
2
3
4
5
6
|
1)打印文件的第一列(域) : awk '{print $1}' filename2)打印文件的前两列(域) : awk '{print $1,$2}' filename3)打印完第一列,然后打印第二列 : awk '{print $1 $2}' filename4)打印文本文件的总行数 : awk 'END{print NR}' filename5)打印文本第一行 :awk 'NR==1{print}' filename6)打印文本第二行第一列 :sed -n "2, 1p" filename | awk 'print $1' |
Awk取文件中的指定数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
[root@jump-v4 ~]# cat a.txt123.122.123.12 12121212121.2332.121.11 232323255.255.255.255 21321123.122.123.12 12121212123.122.123.12 1212121er2123.122.123.12 12121212eer123.122.123.12 12121212ere255.255.255.255 21321121.2332.121.11 232323255.255.255.255 21321[root@jump-v4 ~]# cat a.txt|awk '{print $1}'123.122.123.12121.2332.121.11255.255.255.255123.122.123.12123.122.123.12123.122.123.12123.122.123.12255.255.255.255121.2332.121.11255.255.255.255[root@jump-v4 ~]# cat a.txt|awk '{print $1}'|sort|uniq -c 2 121.2332.121.11 5 123.122.123.12 3 255.255.255.255[root@jump-v4 ~]# cat a.txt|awk '{print $1}'|sort|uniq -c|awk '{print $2,$1}'121.2332.121.11 2123.122.123.12 5255.255.255.255 3[root@jump-v4 ~]# cat a.txt|awk '{print $1}'|sort|uniq -c|awk '{print $2,$1}'|sort -k2 -rn123.122.123.12 5255.255.255.255 3121.2332.121.11 2 |
linux文件按大小来排序
|
1
2
3
4
5
6
|
[root@cdn ~]# ls -s | sort -k 1 -n表示对第一个字段(即文件大小)按数值大小进行排序;如果想倒序,可以增加-r参数;sort命令可进行排序;-k参数表示对第几个字段进行排序;ls -s:第一列显示的是文件大小 |
定时删除resin日志的脚本,每小时删除一次
|
1
2
3
4
5
6
|
[root@cdn ~]# cat resin-log.sh#!/bin/bashcd /data/log/resin && find /data/log/resin ( -name "*jvm-app-0.log.*" -a ! -name "*.gz" ) -a -mmin +30 -exec gzip {} ;[root@cdn ~]# crontab -l0 * * * * /bin/bash -x /root/resin-log.sh >/dev/null 2>&1 |