Linux三驾马车之awk

# awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
awk -F fs   #fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
awk -v var=value   #赋值一个用户定义变量,将外部变量传递给awk
awk -f scripfile  #从脚本文件中读取awk命令
awk -m[fr] val   #对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file #基本结构 三部分可选,任意部分都可不出现在脚本中
echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' #当print的参数是以逗号进行分隔时,打印时则以空格作为定界符。

###awk内置变量
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'
 echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}' # NR表示记录数,在执行过程中对应于当前的行号。 NF表示字段数,在执行过程中对应于当前的字段数。
#Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
#Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
#Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7
echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF-1}'#打印出一行中的最后一个字段
echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}' #打印倒数第二个字段
echo -e"l hh hi ggf"|awk '{ print $2,$3 }' #打印第二、第三个字段 注意''单引号
awk 'END{ print NR }' nex.txt #统计行数

### 外部变量
seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }' ##???
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'#借助-v选项,可以将外部值(并非来自stdin)传递给awk
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2 #传递外部变量2
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename #输入来自于文件时

### 运算与判断
awk 'BEGIN{a="b";print a++,++a;}'# 0 2  所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0
a+=5 #等价于:a=a+5; 其它同类??
awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' ## || 或    && 与
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}' # ~ 匹配正则表达式 ~!不匹配正则表达式
awk 'BEGIN{a=11;if(a >= 9){print "ok";}}' #< <= > >= != == 关系运算符
awk 'BEGIN{a="b";print a=="b"?"ok":"err";}' #??
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}' #??
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' #??

### awk高级输入输出
awk 'NR%2==1{next}{print NR,$0;}' text.txt #在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。
awk 'BEGIN{ "date" | getline out; print out }' test #执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量out,并打印它
echo | awk '{printf("hello word!n") > "datafile"}'  #输出文件
echo | awk '{printf("hello word!n") >> "datafile"}' #输出文件

未完待续


参考来源:生信技能树&&Linux命令大全

友情链接:

课程分享
生信技能树全球公益巡讲
https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
B站公益74小时生信工程师教学视频合辑
https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
招学徒:
https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw

欢迎关注公众号:青岛生信菜鸟团

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

推荐阅读更多精彩内容