awk的命令集景!!

使用awk命令获取文本的某一行,某一列的技巧:

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)打印文本最后一行: awk 'END{print}' filename
7)打印文本第二行第一列 :sed -n "2, 1p" filename | awk '{print $1}'

sed -n "2, 1p" /etc/passwd | awk -F: '{print $1}'

打印passwd用户文件里面的第1列第2行的内容

awk -F: '{print $1}' /etc/passwd |awk NR==2
bin
[root@nanjing1 ~]#
[root@nanjing1 ~]#
[root@nanjing1 ~]#
打印passwd用户文件里面的第1列第一行的内容
[root@nanjing1 ~]# awk -F: '{print $1}' /etc/passwd |awk NR==1
root

awk -F: '/^root/{print $1}' /etc/passwd
root

 

#打印注释有多少行,非注释有多少行

###

[root@nanjing1 conf]# grep "#" nginx.conf |wc -l
64
[root@nanjing1 conf]# grep -v "#" nginx.conf |wc -l
53
[root@nanjing1 conf]# awk '!/#/{print}' nginx.conf|wc -l
53
[root@nanjing1 conf]# awk '/#/{print}' nginx.conf|wc -l
64

###

#打印空行有多少行

31
[root@nanjing1 conf]# grep ^$ nginx.conf |wc -l
31

统计当前Linux系统中可以登录计算机的账户有多少个

#!/bin/bash

# 统计当前 Linux 系统中可以登录计算机的账户有多少个
#方法 1:
grep "bash$" /etc/passwd | wc -l

# grep "bash$" /etc/passwd | wc -l
5

 

[root@nanjing1 ~]# awk -F: '{print $7}' /etc/passwd|sort|uniq -c
5 /bin/bash
1 /bin/false
1 /bin/sync
1 /sbin/halt
22 /sbin/nologin
1 /sbin/shutdown


#方法 2:
awk -f: '/bash$/{x++}end{print x}'  /etc/passwd

 #################################################################

1. 打印指定列

Awk命令可以用于从文件或标准输入中提取指定的列。下面的例子演示了如何打印文件中的第一列和第三列:

$ cat data.txt
John Doe 25
Jane Smith 30
Tom Johnson 35

$ awk '{print $1, $3}' data.txt
John 25
Jane 30
Tom 35

 

2. 使用条件筛选行

Awk命令可以根据条件筛选行并进行处理。下面的例子演示了如何筛选出年龄大于等于30岁的行:

$ cat data.txt
John Doe 25
Jane Smith 30
Tom Johnson 35

$ awk '$3 >= 30' data.txt
Jane Smith 30
Tom Johnson 35

 

3. 自定义分隔符

Awk命令默认使用空格作为字段分隔符,但是可以根据需要自定义分隔符。下面的例子演示了如何使用冒号作为字段分隔符,并打印第二列:

$ cat data.txt
John:Doe:25
Jane:Smith:30
Tom:Johnson:35

$ awk -F ':' '{print $2}' data.txt
Doe
Smith
Johnson

 

4. 使用内置变量

Awk命令提供了许多有用的内置变量,可以在处理过程中使用。其中,NF表示当前行的字段数量,NR表示当前行的行号。下面的例子演示了如何打印每行的行号和字段数量:

$ cat data.txt
John Doe 25
Jane Smith 30
Tom Johnson 35

$ awk '{print "Line:", NR, "Fields:", NF}' data.txt
Line: 1 Fields: 3
Line: 2 Fields: 3
Line: 3 Fields: 3

 

5. 使用内置函数

Awk命令还提供了许多内置函数,可以用于字符串操作、数学计算等。下面的例子演示了如何使用内置函数计算文件中所有数字的总和:

$ cat data.txt
10
20
30
40

$ awk '{sum += $1} END {print "Sum:", sum}' data.txt
Sum: 100

 6.打印root

awk -F: '/^root/{print $1}' /etc/passwd

awk -F: '$3==0{print $1}' /etc/passwd
awk -F: 'NR==1{print $1}' /etc/passwd
[root@mongodb files]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@mongodb files]# sed -n '/^root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@mongodb files]# sed -n '/bash$/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
yidong:x:1000:1000::/home/yidong:/bin/bash
[root@mongodb files]# awk -F: '$1~/root/{print $1}' /etc/passwd
root
[root@mongodb files]# awk -F: '$1~/ro/{print $1}' /etc/passwd
root
[root@mongodb files]# awk  '$1~/ro/{print $1}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
posted @ 2022-12-12 22:05  往事已成昨天  阅读(33)  评论(0编辑  收藏  举报