awk技巧(如取某一行数据中的倒数第N列等)

使用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/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

 

[root@ipsan-node06 ~]# awk -F":" '{print $2,$(NF),$(NF-1),$(NF-3)}' /etc/passwd

/bin/bash /root 0

/sbin/nologin /bin 1

/sbin/nologin /sbin 2

/sbin/nologin /var/adm 4

/sbin/nologin /var/spool/lpd 7

/bin/sync /sbin 0

/sbin/shutdown /sbin 0

/sbin/halt /sbin 0

/sbin/nologin /var/spool/mail 12

/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|uniq

1    34

1    49

2    45

2    48

3    54

3    57

3    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 49

2: 45 48

3: 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}' filename

2)打印文件的前两列(域) : awk '{print $1,$2}' filename

3)打印完第一列,然后打印第二列 : awk '{print $1 $2}' filename

4)打印文本文件的总行数 : awk 'END{print NR}' filename

5)打印文本第一行 :awk 'NR==1{print}' filename

6)打印文本第二行第一列 :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.txt

123.122.123.12 12121212

121.2332.121.11 232323

255.255.255.255 21321

123.122.123.12 12121212

123.122.123.12 1212121er2

123.122.123.12 12121212eer

123.122.123.12 12121212ere

255.255.255.255 21321

121.2332.121.11 232323

255.255.255.255 21321

 

[root@jump-v4 ~]# cat a.txt|awk '{print $1}'

123.122.123.12

121.2332.121.11

255.255.255.255

123.122.123.12

123.122.123.12

123.122.123.12

123.122.123.12

255.255.255.255

121.2332.121.11

255.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 2

123.122.123.12 5

255.255.255.255 3

 

[root@jump-v4 ~]# cat a.txt|awk '{print $1}'|sort|uniq -c|awk '{print $2,$1}'|sort -k2 -rn

123.122.123.12 5

255.255.255.255 3

121.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/bash

cd /data/log/resin && find /data/log/resin \( -name "*jvm-app-0.log.*" -a ! -name "*.gz" \) -a -mmin +30 -exec gzip  {} \;

 

[root@cdn ~]# crontab -l

0 * * * * /bin/bash -x /root/resin-log.sh >/dev/null 2>&1

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

    原文作者:_冬日的阳光_
    原文地址: https://blog.csdn.net/fhl13017599952/article/details/85951548
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞