[关闭]
@orangleliu 2015-05-19T11:15:48.000000Z 字数 1248 阅读 1623

awk小结

shell


把平时用到的shell编程总结到一起, 印象中的使用基本就是print,split,正则,并不是很熟悉

基本

不同列分割符号

  1. liuzhizhi@lzz-rmbp|awk # cat basesplit.txt
  2. xiaoming 20 apple
  3. orangleliu 50 book
  4. xiaoniu 23 pc
  5. liuzhizhi@lzz-rmbp|awk # cat basesplit.txt|awk '{print $2,$1}'
  6. 20 xiaoming
  7. 50 orangleliu
  8. 23 xiaoniu

awk 默认是空格切分列的,print可以打印出对应的列,$1,$2...代表切分后的列,从1开始,$0, 代表一整行。

下面的例子演示下使用其他分隔符的情况,主要使用了 -F 参数,后面跟着自定义的分隔符。

  1. liuzhizhi@lzz-rmbp|awk # cat basesplit.txt
  2. xiaoming,20, apple
  3. orangleliu,50, book
  4. xiaoniu,23, pc
  5. liuzhizhi@lzz-rmbp|awk # cat basesplit.txt|awk -F',' '{print $3, $0}'
  6. apple xiaoming,20, apple
  7. book orangleliu,50, book
  8. pc xiaoniu,23, pc

正则匹配

现在用的不是很多,用grep 处理习惯了,可能更复杂的脚本会用到

结合split

有时候我们会对某一列进行一些简单的字符串处理,从一个有规律的字符串中提取我们需要的信息。

  1. liuzhizhi@lzz-rmbp|awk # cat awksplit.txt
  2. /media/games/moca.apk?key 14315094084053RbtH5x7aQCMprr 4775504
  3. /media/games/moca.apk?key 14315094084053RbtH5x7aQCMprr 4300340
  4. /media/games/moca.apk?key 14315094084053RbtH5x7aQCMprr 4278316
  5. liuzhizhi@lzz-rmbp|awk # cat awksplit.txt|awk '{split($1 ,g, "/"); split(g[4], m, "?");print m[1],$2}'
  6. moca.apk 14315094084053RbtH5x7aQCMprr
  7. moca.apk 14315094084053RbtH5x7aQCMprr
  8. moca.apk 14315094084053RbtH5x7aQCMprr

上面的脚本的主要就是处理第一列的数据,并提取apk文件的名称。
awk '{split($1 ,g, "/"); split(g[4], m, "?");print m[1],$2}', split方法的第一个参数是要分隔的字符串,第二个参数是分割后的数组,我们可以用数组的index得到需要的部分,第三个参数就是分隔符了。 上面的/media/games/moca.apk?key经过两次分割得到了apk文件的名称。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注