工欲善其事,必先利其器。
掌握了Linux文本三剑客,可谓是事半功倍。
对于刚接触Linux的同学来说,Linux的各种命令真的时让人望而生畏。工作中看到大神们一通操作猛如虎,各种命令以及参数眼花缭乱。
当我们用过一些命令,但又不熟悉得情况下,这个时候就得从全局入手,看看Linux有哪几类命令,先提纲挈领,至少我们能知道完成什么样得功能我需要用什么命令,至于细节参数,查手册多用几次就熟悉了。而不是每次都束手无策,盲目查找。
今天我们就来看一下Linux对于文本处理的三大利器之一awk。基本上可以满足对文本处理的所有任务。
awk
简介
AWK是Linux强大的文本处理工具,其名称由来取自于三位创始人姓氏的首字母。
命令格式
awk [options] 'pattern {action}' file1 file2, ...
awk [options] 'script' file1 file2, ...
pattern: 模式或条件
action: 对数据处理,常用print
常用内建变量
FS: 列分割符。指定每行文本的字段分割符,默认为空格或者治标位。与“-F”作用相同
NF: 当前处理的行的字段个数;
NR: 当前处理的行的行号;
$0: 当前处理的行的整行内容;
$n: 当前处理行的第n个字段;
FILENAME: 被处理的文件名
基本用法
测试文件test.txt, 注意空格和逗号;
(base) rhett@LAPTOP-MV0SUCM6:~$ cat test.txt
today,is, a sunny, day;
I read,a book, this afternoon;
And plan,to do, some coding,after dinner.
Have a good day.
案例1
按行输出:输出文件的1~3行
(base) rhett@LAPTOP-MV0SUCM6:~$ awk '(NR>=1)&&(NR<=3)' test.txt
today,is, a sunny, day;
I read,a book, this afternoon;
And plan,to do, some coding,after dinner.
案例2
按字段输出:输出每行中的第1、3个字段(默认空格分割符)
(base) rhett@LAPTOP-MV0SUCM6:~$ awk '{print $1,$3}' test.txt
today,is, sunny,
I book,
And do,
Have good
案例3
指定分隔符输出
(base) rhett@LAPTOP-MV0SUCM6:~$ awk -F ',' '{print $1,$2}' test.txt
today is
I read a book
And plan to do
Have a good day.
案例4
输出分段输大于3的行
(base) rhett@LAPTOP-MV0SUCM6:~$ awk -F ',' 'NF>3 {print $1,$2}' test.txt
today is
And plan to do
案例5
输出文件参数
(base) rhett@LAPTOP-MV0SUCM6:~$ awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' test.txt
FILENAME ARGC FNR FS NF NR OFS ORS RS
---------------------------------------------
test.txt 2 1 4 1
test.txt 2 2 5 2
test.txt 2 3 6 3
test.txt 2 4 4 4
标签:rhett,4s,文本处理,awk,Linux,test,txt,三剑客
From: https://www.cnblogs.com/bailiji/p/17609647.html