Shell Function按列提取内容

发布日期:2016年4月14日

函数

整理了一个Shell Function用来按列提取内容,把下面这段代码加入到自己的bash profile中(bash的~/.bash_profile 或 zsh的~/.zshrc)

function cl(){
        if [ $# -eq 2 ] ;  then
                awk -F "[$1]" -v col=$2  '{print $col}'
        else
                awk -v col=$1 '{print $col}'
        fi
}

使用

cl 这个function有两种用法 用法1: xxx命令 | cl 列号(第一列是1) 这种是以空格或连续空格做为分隔符,按需输出列 用法2: xxx命令 | cl 分隔符 列号(第一列是1) 这种是以指定的符号做为分隔符 ,按需输出列

案例1

prelib包含了以下的文本内容,列和列之间用空格进行分隔

命令:head -n 10 prelib

输出:
CoDec-build17-jdk13.jar    256 KB    查看    下载
FlexiProvider-1.6p7.signed.jar    1.22 MB    查看    下载
account-session-api-1.0.2.jar    7.78 KB    查看    下载
ak.sdk-1.0.22.jar    91.27 KB    查看    下载
alimonitor-jmonitor-1.0.0.jar    325.03 KB    查看    下载
alipay-common-lang-2.0.7.jar    4.4 MB    查看    下载
aliyun-java-sdk-core-2.2.0.jar    66.01 KB    查看    下载

我们想把第一列jar包的名字提取出来

命令:cat prelib| cl 1

输出:
CoDec-build17-jdk13.jar
FlexiProvider-1.6p7.signed.jar
account-session-api-1.0.2.jar
ak.sdk-1.0.22.jar
alimonitor-jmonitor-1.0.0.jar
alipay-common-lang-2.0.7.jar
aliyun-java-sdk-core-2.2.0.jar
aliyun-java-sdk-ecs-h5-new-1.0.0-20160328.120633-1.jar
aliyun-java-sdk-lx-1.0.0.jar
aliyun-openservices-1.2.2.jar

案例2

二维码,userDataId,registraId,阿里云ID,用户名,registraId,提交时间,ip,用户申请数,ip申请数,状态,危险用户,审核人,审核时间
725285,385825,79152,    1694865393857573,[email protected],79152,2016-04-07 13:18,30.9.176.118,1,1,0,false,,

上面这个csv文件我们想提取第五列

命令: cat 2016-04-08-21-yunqi_shenzhen_vipapply.csv | cl , 5

输出:
用户名
[email protected]

最后说两句:shell命令和编程绝对值得大家去学习,shell的学习成本有点高,2-3个月的时间少不了,我花了更长的时间才基本掌握它,shell命令和编程虽然不能用于写业务代码,但它能在很多时候提升你的工作效率,而且通过学习Shell脚本,使得自己慢慢地能看的懂各种服务启动、编译打包的脚本,潜移默化地具备有Dev ops的基本能力。此外也会让你的Mac真正有别于windows,否则<ac就是换了壳的Windows,当然Windows也有自己的脚本语言