cut字段提取命令


格式

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
[ root@localhost ~ ] $ cut [ 选项 ] 文件名

选项:

-f --列号:提取第几列

-d --分隔符:按照指定分隔符分割列

示例:
[ root@localhost ~ ] $ vim student.txt

// ID Name gender Mark

// 1 libai M 78

// 2 hanxin M 87

// 3 wanwei M 89



[ root@localhost ~ ] $ cut -f2 student.txt 提取表中的第二列

// Name

// libai

// hanxin

// wanwei


[ root@localhost ~ ] $ cut -f2,3 student.txt
// 提取表中的第二列和第三列

[ root@localhost ~ ] $ cut -d“:”-f 1,3 /etc/passwd
// 以“:”为分隔符,提取用户户表的第二列和第三列



printf命令


格式

1
2
3
4
[ root@localhost ~ ] $ printf ' 输出类型和输出格式 ' $(cut 文件名) --输出指定的文件

[ root@localhost ~ ] $ printf ' 输出类型和输出格式 ' 输出内容

输出类型:

%ns 输出字符串。n是数字,指输出几个字符

%ni 输出整数。n是数字,指输出几个数字

%m.nf 输出浮点数。m、n是数字,指输出的整数位数和小数位数。

如:%8.2f 代表一共输出为8位数,其中2位是小数,6位使正式

输出格式:

a 输出警告声音

b 输出退格键,就是backspace键

f 清除屏幕

n 换行

r 回车,就是enter键

t 水平输出退格键,就是tab键

v 垂直输出退格键,就是tab键

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[ root@localhost ~ ] $ printf %s 1 2 3 4 5 6
// 123456

[ root@localhost ~ ] $ printf %s %s %s 1 2 3 4 5 6
// %s%s123456

[ root@localhost ~ ] $ printf ' %s %s %s ' 1 2 3 4 5 6
// 1 2 34 5 6

[ root@localhost ~ ] $ printf ' %s %s %s n ' 1 2 3 4 5 6

// 1 2 3
// 4 5 6

[ root@localhost ~ ] $ printf '%s' $(cat student.txt)
#不调整输出格式

[ root@localhost ~ ] $ printf ' %st %st %st n ' $(cat student.txt)
#调整输出格式



awk命令


概述

在awk命令的输出中支持print和printf命令

print:会在每个输出之后自动添加一个换行符(linux默认没有print命令)

Printf:是标准格式输出命令,并不会自动添加换行符,需要手动添加换行符

格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[ root@localhost ~ ] $ awk ' 条件1{动作1} 条件2{动作2}…' 文件名


# 条件(pattern):一般使用关系表达式作为条件
x>10 --判断变量x是否大于10
x>=10 --判断变量x是否大于等于10
x<=10 --判断变量x是否小于等于10

# 动作(action):
格式化输出
流程控制语句


示例:

[ root@localhost ~ ] $ awk '{printf $2 "t" $6 "n"}' student.txt
# 输出并打印student文件的第2和第6列。$n:当前处理行的第n个字段(第n列)

[ root@localhost ~ ] $ df -h | awk '{print $1 "t" $3}'

# 输出并打印磁盘占用的第1和第3列。Df -h:查看磁盘的占用情况

begin

1
[ root@localhost ~ ] $ awk 'BEGIN{printf "This is a transcript n"}' {printf $2 "t" $6 "n"}' student.txt

FS内置变量

1
2
3
[ root@localhost ~ ] $ cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "t" $3 "n"}'

# 输出用户信息,开始第一次读取时以(FS=“:”)“:”分隔符分割,并打印出第1字段和第3字段

关系运算符

1
2
3
[ root@localhost ~ ] $ cat student.txt | grep -v Name | awk '$6>=87 {printf $2 "n"}'

# grep -v Name:输出排除有“Name”字符的行,打印出符合条件第6字段大于等于87的第2列信息



sed命令


概述

sed是一种几乎包括在所有unix平台的轻量级的编辑器。主要用来将数据进行选取、替换、删除、新增的命令

格式

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
[ root@localhost ~ ] $ sed [ 选项 ] ‘[ 动作 ]’文件名

选项:

-n --一般sed命令将所有的数据输出到屏幕,-n--则会把经过sed命令处理的行输出到屏幕

-e --允许对输入的数据应用多条sed命令编辑

-i --经过sed命令处理的结果直接修改读取的文件,而不是只输出到屏幕

动作:

a\ --追加;在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需加“\”表示未完结

示例://2a)表示第二行后

c\ --行替换,用c后面的字符串替换原来的数据行,添加多行时,除最后一行外,每行末尾需加“\”表示未完结(3c)

i\ --插入;在当前行行前插入一行或多行数据,添加多行时,除最后一行外,每行末尾需加“\”表示未完结(4i)

d --删除指定的行

p --打印,输出指定的行(译:print)

s --字符串替换,用一个新字符串替换旧字符串。格式为 "行范围s/旧字符串/新字符串/g" ("2s/old/new/g")

示例

  • 行数据操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[ root@localhost ~ ] $ sed '2p' student.txt
# 查看文件的第二行

[ root@localhost ~ ] $ sed -n '2p' student.txt
# 将sed命令处理的数据输出到屏幕

[ root@localhost ~ ] $ sed ‘2,4d’student.txt
# 删除第二行到第四行的数据,但不修改文件本身数据

[ root@localhost ~ ] $ sed ‘2a hello’ student.txt
# 在第二行添加为“hello”的一行

[ root@localhost ~ ] $ sed ‘2i hello \world’ student.txt
# 在第二行前分别添加为“hello”与“world”的两行 --- “\”换行符

[ root@localhost ~ ] $ sed ‘2c mylove’ student.txt
# 将第二行的数据替换成“mylove”的行
  • 字符串替换
1
2
3
4
5
6
7
8
9
10
11
12
13
格式: [ root@localhost ~ ] $ sed ‘行范围s/旧字符串/新字符串/g’文件名

示例: [ root@localhost ~ ] $ sed '3s/74/99/g' student.txt

# 将第三行中的74替换为99

示例: [ root@localhost ~ ] $ sed -i '3s/74/99/g' student.txt

# 将第三行中的74替换为99,并将sed命令处理的数据直接写入文件

示例: [ root@localhost ~ ] $ sed -e 's/74// ; s/99//g' student.txt

# 将所有行中的为7499的数据替换为空