awk进行行分隔

首先要说明一下,我本身对shell语言并不熟悉,在这里写的是一些自己用到过的语法,做一个记录,方便今后学习和使用。如果有不对的地方,或者更好的方法请多多请指教。

一、使用 awk 进行列分隔:

基本用法:awk -F  分隔符 '{print $列数}'     ## 分隔符默认为空格    ## $0表示整行

场景1:从test.txt中取出对应的行。
test.txt的内容如下:
Apple    8   ¥/kg      2   kg
Banana   5   ¥/kg      10  kg
Orange   12  ¥/kg      5   kg
Durian   20  ¥/kg      0   kg

1)以空格(默认)为间隔取出文件中第1,2,4列
awk '{print $1, $2, $4}' test.txt
cat test.txt |awk '{print $1,$2,$4}'
-------------
Apple 8 2
Banana 5 10
Orange 12 5
Durian 20 0

2)以 / 为间隔取出第1列:awk -F / '{print $1}' test.txt
-------------
Apple    8   ¥
Banana   5   ¥
Orange   12  ¥
Durian   20  ¥

3)格式化输出:awk '{printf "%-8s %-6s %-6s\n",$1, $2, $4}' test.txt
-------------
Apple    8      2     
Banana   5      10    
Orange   12     5     
Durian   20     0

4)对分隔结果再分隔:先用空格分隔区第3列,再以/为分隔取第一列:
awk '{print $3}' test.txt|awk -F / '{print $1}'
-------------
¥
¥
¥
¥

5)运算:选取第4列大于0的行,输出 第2列乘以第4列的值:
awk '$4>0 {print $0,"\t=",$2*$4,"¥"}' test.txt
-------------
Apple    8   ¥/kg      2   kg   = 16 ¥
Banana   5   ¥/kg      10  kg   = 50 ¥
Orange   12  ¥/kg      5   kg   = 60 ¥

6)使用awk命令获取本机ip地址:
ifconfig enp2s0 |grep "inet "|awk -F : '{print $2}'|awk  '{print $1}'

*内建变量:
内建变量

7)参考以下文章学习:
http://www.runoob.com/linux/linux-comm-awk.html
http://awk.readthedocs.io/en/latest/chapter-one.html

猜你喜欢

转载自blog.csdn.net/frank_abagnale/article/details/79245362