awk sed sort wc

awk

awk ‘条件1{动作1} 条件2{动作2}’ 文件名

[admin@host ~]$ cat student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66

输出第2列和第6列

[admin@host ~]$ awk '{printf $2 "\t" $6 "\n"}' student.txt
Name Average
Liming 87.66
Sc 85.66
Gao 91.66

BEGIN

[admin@host ~]$ awk 'BEGIN{printf "This is a transcript \n" }
> {printf $2 "\t" $6 "\n"}' student.txt
This is a transcript
Name Average
Liming 87.66
Sc 85.66
Gao 91.66

END

[admin@host ~]$ awk 'END{printf "The End \n" }
> {printf $2 "\t" $6 "\n"}' student.txt
Name Average
Liming 87.66
Sc 85.66
Gao 91.66
The End

FS(Field Separator):列分割符。决定了怎么将一行划分为几段。预设值是空白符(空白和Tab)。

[admin@host ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
…
rec:x:1002:1002::/home/rec:/bin/bash
[admin@host ~]$ cat /etc/passwd | grep "/bin/bash" | \
> awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
root 0
admin 1000
crassus 1001
rec 1002

关系运算符

[admin@host ~]$ cat student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66

[admin@host ~]$ cat student.txt | grep -v Name | awk '$6 >= 87 {printf $2 "\n" }'
Liming
Gao

sed

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

[root@localhost ~]# sed [选项] ‘[动作]’ 文件名

符号含义
-n一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
-e允许对输入数据应用多条sed命令编辑。
-i用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。
a \追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用"\"代表数据未完结。
c \行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用"\"代表数据未完结。
i \插入,在当期行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用"\"代表数据未完结。
d删除,删除指定的行。
p打印,输出指定的行。
s字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换格式类似)。

文本内容

[admin@host ~]$ cat student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66

打印第2行

[admin@host ~]$ cat student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66

[admin@host ~]$ sed '2p' student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
[admin@host ~]$ sed -n '2p' student.txt
1 Liming 82 95 86 87.66

删除第2行到第4行

[admin@host ~]$ cat student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
[admin@host ~]$ sed '2,4d' student.txt
ID Name PHP Linux MySQL Average

在第2行后追加hello

[admin@host ~]$ sed '2a hello' student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
hello
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66

在第2行前添加hello world

[admin@host ~]$ sed '2i hello world' student.txt
ID Name PHP Linux MySQL Average
hello world
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66

把第2行替换

[admin@host ~]$ sed '2c No such person' student.txt
ID Name PHP Linux MySQL Average
No such person
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66

字符串替换

[admin@host ~]$ sed '3s\74\99\g' student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 99 96 87 85.66
3 Gao 99 83 93 91.66

直接写入文件

[admin@host ~]$ sed -i '3s\74\99\g' student.txt
[admin@host ~]$ cat student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 99 96 87 85.66
3 Gao 99 83 93 91.66

同时把Liming和Gao替换为空

[admin@host ~]$ sed -e 's/Liming//g ; s/Gao//g' student.txt
ID Name PHP Linux MySQL Average
1  82 95 86 87.66
2 Sc 99 96 87 85.66
3  99 83 93 91.66

sort

[root@localhost ~]# sort [选项] 文件名

符号含义
-f忽略大小写
-n以数值型进行排序,默认使用字符串型排序
-r反向排序
-t指定分隔符,默认是分隔符是制表符
-k [n,m]按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

以:为分隔符,按第3个字段排序

[admin@host ~]$ sort -t ":" -k 3,3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
admin:x:1000:1000::/home/admin:/bin/bash

sort完全去重

$ sort -u testfile
1
2
3
4
5
6

wc

[root@localhost ~]# wc [选项] 文件名

符号含义
-l只统计行数
-w只统计单词数
-m只统计字符数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值