【Linux shell学习笔记-11-gawk基础】

gawk程序是Unix中的原始awk程序的GNU版本,它能提供一个类编程环境来修改和重新组织文件,完成诸如从文本文件中提取数据、生成报告等任务。

在gawk中我们可以做下面的事情:

  • 定义变量来保存数据;
  • 使用算术和字符串操作符来处理数据;
  • 使用结构化编程概念(比如if-then语句和循环)来为数据处理增加处理逻辑;
  • 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告;

gawk命令格式

gawk <options> <program file>

gawk options 选项:

  • -F fs:指定行中划分数据字段的字段分隔符
  • -f file:从指定的文件中读取程序
  • -v var=value:定义gawk程序中的一个变量及其默认值
  • -mf N:指定要处理的数据文件中的最大字段数
  • -mr N:指定数据文件中的最大数据行数
  • -W keyword:指定gawk的兼容模式或警告等级

从命令行读取脚本

gawk '{print "Hello World!"}'

This is a test
Hello World!
hello

上面的命令行程序并没有指定文件名,所以gawk程序会从STDIN接收数据,它会等待从STDIN输入之后才会执行print,输入完毕后gawk程序会等待EOF(ctrl+D)字符终止程序的执行

使用数据字段变量
可以使用-F选项来指定分隔符将一个文本行分隔成若干数据字段(默认空格)

  • $0代表整个文本行;
  • $1代表文本行中的第1个数据字段;
  • $2代表文本行中的第2个数据字段;
  • $n代表文本行中的第n个数据字段;
  • $NF代表文本行中的最后一个数据字段
    打印"/etc/passwd"文件中的第1个字段,即用户名
gawk -F: '{print $1}' /etc/passwd

root
bin
daemon
adm
lp
sync
shutdown
halt
mail

在脚本程序中使用多个命令
在gawk编程中,允许将多个命令组成一个功能更多的程序,只需要在每个命令后面添加分号(;)即可。

echo "My name is Rich" | gawk '{$4="Christine"; print $0}'

My name is Christine

也可以用次提示符一次一行地输入程序脚本命令。

 gawk '{
> $4="Christine"
> print $0}'
My name is Rich

My name is Christine

在文件中读取程序
使用-f选项指定程序文件,程序文件中包含了需要执行的gawk程序代码

cat script2.gawk
{print $1 "'s home directory is " $6}

gawk -F: -f script2.gawk /etc/passwd

root's home directory is /root
bin's home directory is /bin
daemon's home directory is /sbin
adm's home directory is /var/adm
lp's home directory is /var/spool/lpd

在处理数据前后运行脚本
使用关键字'BEGIN'在处理数据前运行脚本

gawk 'BEGIN {print "The data3 File Contents:"} 
> {print $0}' data3.txt

The data3 File Contents:
Line 1
Line 2
Line 3

使用关键字'END'在处理数据前运行脚本

gawk 'BEGIN {print "The data3 File Contents:"} 
> {print $0}
> END {print "End of File"}' data3.txt

The data3 File Contents:
Line 1
Line 2
Line 3
End of File

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,000评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,745评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,561评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,782评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,798评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,394评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,952评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,852评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,409评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,483评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,615评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,303评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,979评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,470评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,571评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,041评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,630评论 2 359

推荐阅读更多精彩内容