linux awk入门,awk 入门教程

linux中awk是一个强大的文本分析工具,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理

awk空格等于把两个字段拼接起来

" "表示中间是字符

OFS默认是一个空格,将文本文件拼接到一起。当给某一列赋值时,会使OFS重新拼接文件

查看文件

awk '{print}' coin.txt

05788d91d786fa289841c6020a8f60a9.png

查看第一列

awk '{print $1}' coin.txt

7944a3c1d9a8c3f08f2d9955e06a003d.png

查看文件前三列

awk '{print $1,$2,$3}' coin.txt

1a89bfec4510f6367753832ff005e2dd.png

添加制表符 "t" 使每列直接用tab隔开

awk '{print $1 "t" $2 "t" $3}' coin.txt

7eaf321e046aa54ea7dadce318f6a480.png

NR代表文件每行的行数

NF代表文件中每行有多少个字段个数

"NR"=number of record

"NF"=number of field

打印出文件中每列有多少个字段

awk '{print NF}' coin.txt

534fa84db0120a0d3eded996d1415c74.png

打印出文件中有多少行

awk '{print NR}' coin.txt

8307627350bca44e5ede5b23f8291e84.png

打印前两列,并显示每列的行数

awk '{print NR "t" $1 "t" $2}' coin.txt

2514239e1b5fba892446de5032674b5d.png

显示出文件所有内容,并打印出每行的行数

awk '{print NR, $0}' coin.txt # $0表示输出coin.txt的所有内容,NR", " 表示行数与第一列以一个空格分隔

5536694ff0d93bcd47c895107f674b13.png

打印出文件内容并且输出每一行的字段个数

awk '{print NF "t" $0}' coin.txt

356b7921c33a96f905a24a12c17d3992.png

第三列是1986就打印出来

awk '$3==1986 {print $0}' coin.txt

6765d28726af9f96ad106e10c3452b0a.png

打印出第一列等于gold的信息

awk '$1=="gold" {print $0}' coin.txt #字符串要使用双引号

1f51b868e3b68406c4d59e10399fcc8d.png

打印出第7行

awk 'NR==7{print NR, $0}' coin.txt

c35045805a1be01c40f918ab4961a85a.png

打印出字段数为7的

awk 'NF==7{print NR, $0}' coin.txt

f296cdb358fd94449b5ec7faddf0da2f.png

如果awl命令后边没有文件名的话,awk会等待你输入,然后再执行命令输出信息

5608114eaa195a84b081bd9a72f33296.png

e27dee1568f67779055d93e2e7b25977.png

Ctrl+C 退出

用FS自定义自己的分隔符,只会以逗号进行分割,就算字符中间有空格的话,依旧会以逗号分隔打印出来

c824bd4f5f3f3379aefc359f7ad2eea5.png

d4ea3d3f41e6616950cd1c36742a1abd.png

用OFS定义输出分隔符

ddd8fc6e88899b9098fb25ccb6c24e1d.png

也看以同时把输入输出分隔符定义成一个符号,中间用分号隔开

d8525dccaa5f965e338c76b6e06aa8cb.png

可以同时打印两个文件

awk '{print NR,$0}' coin.txt 1.txt

6c9a6e5713559e68a394e1b9181d3faa.png

加FILENAME 打印出文件名

awk '{print NR,FILENAME,$0}' coin.txt 1.txt

be71f4058a2cdd0e0673eada1b44d53c.png

可以选择文件内容进行赋值,比如把第三列输出成空格

awk '{$3=" ";print $0}' coin.txt

843ea53e34ddf024bd5621ec6a67f604.png

用NF打印出每列最后一个字段

awk '{print $NF}' coin.txt #NF代表每列有多少个字段,所以直接打印NF就可以

94e1d282d154f9e8b9a46629d80699b1.png

打印每列倒数第二个同理

awk '{print $(NF-1)}' coin.txt

e64f8e63a0dfef47f8fa4567d750e591.png

正则表达式

/ /

编辑一个test文件,打印出”abc“

4930f50bdb1880464d56b9aa0d630075.png

awk '/abc/{print $0}' test.txt

66eb0467193536d767476ee303d37ac5.png

/a.b/ 点在这里表示a和b之间任意一个字符

awk '/a.c/{print $0}'

3c50b11e692c578bfee65d66651813c7.png

/a.c/ " "是转译字符,只打印出a.c, 匹配其他特殊字符时同理

03e2e6b6a535faede0994e214e3322de.png

21b1a37aaf171719ff06381c48a0d122.png

^和$ ^表示所匹配字符串要在字段最前面,$表示所匹配字符串在字段最后

awk '/^777/{print $0}'

awk '/777$/{print $0}

e1acfde916b7460532c517465b47b995.png

3fc7a578f0d42a255202c2d021e5c9db.png

/a[xzy]b/ 表示可以匹配a和b中间[]里的xzy中任意一个字符

awk '/a[xzy]c/{print $0}'

d5f94a8a6df0af1a958107c1b06de54f.png

/a[a-z]b/同理,匹配[]中a和z直接任意一个字符

awk '/a[a-z]c/{print $0}'

0060905bc118e2b87619f25b33585933.png

awk '/a[a-zA-Z]c/{print $0}' #a到z A到Z中间任意一个字符

5c39ae4bdda577d2ad2698f6429589a2.png

^如果在[]里表示不是的意思

[^]

awk '/a[^a-z]c/ {print $0}' #小写a到z不匹配

d6fc97cdbc640e5a37c7e008b98884ae.png

* 和 + ?

*表示0次或多次

比如:

/a*b/

可以匹配到

"ab"

"aab"

"aaab"

"b"

+表示最少1次

比如:

/a+b/

可以匹配到

"ab"

"aab"

不能匹配到

"b"

"/>

也可以扩展{2,3}

awk '/ab{2,3}c/ {print $0}' #表示b可以出现2次到3次

ac73d498c0dac3d66351ddba00bed288.png

/ab{2,}c/ 表示最少出现2个b。

8672dc7df6d4de8732479308d7bf91f4.png

()表示把()里的变成一个整体

比如/(ab)+c/

awk '/(ab)+c/ {print $0}'

e9e38dbd4a0c076a7156fc3418a32907.png

欢迎加入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值