- 论坛徽章:
- 145
|
本帖最后由 jason680 于 2017-05-21 15:45 编辑
回复 1# 巨蟹周子琪
- $ cat f
- +-----------+-----------+---------+------+
- | id | aaa | bbb | ccc |
- +-----------+-----------+---------+------+
- | 123123 | 8888 | 8777 | 9999 |
- | 123124 | 8889 | 8778 | 9990 |
- | 123125 | 8880 | 8779 | 9991 |
- +-----------+-----------+---------+------+
- $ awk -vk="ccc,id" -f get_kw.awk f
- +------+-----------+
- | ccc | id |
- +------+-----------+
- | 9999 | 123123 |
- | 9990 | 123124 |
- | 9991 | 123125 |
- +------+-----------+
- $ awk -vk="bbb,ccc" -f get_kw.awk f
- +---------+------+
- | bbb | ccc |
- +---------+------+
- | 8777 | 9999 |
- | 8778 | 9990 |
- | 8779 | 9991 |
- +---------+------+
- $ awk -f get_kw.awk f
- Usage : awk -vk="kw1,kw2,..." -f get_kw.awk FILE
- Example: awk -vk="binary,agent_type,alive" -f get_kw.awk file
- Example: neutron agent-list | awk -vk="binary,agent_type,alive" -f get_kw.awk
复制代码
$ cat get_kw.awk
- BEGIN{
- if(k==""){
- print "Usage : awk -vk=\"kw1,kw2,...\" -f get_kw.awk FILE"
- print "Example: awk -vk=\"binary,agent_type,alive\" -f get_kw.awk file"
- print "Example: neutron agent-list | awk -vk=\"binary,agent_type,alive\" -f get_kw.awk"
- exit
- }
- OFS=FS="|";
- }
- function trim(s){
- gsub("^ +| +$","",s);
- return(s);
- }
- function gh(s,k,n,t){
- t=split(s,a,",");
- for(n=2;n<=NF;++n){
- ak[trim($n)]=n;
- }
- for(n=1;n<=t;++n){
- k=a[n];
- if(!ak[k]){
- print "CAN NOT find the "k" key word in\n"$0;
- exit;
- }
- h = h "+" ah[ak[k]]
- an[++c] = ak[k];
- }
- h = h "+"
- }
- /^+-+/{
- if(!h){
- split($0,ah,"+");
- next;
- }
- print h;
- next
- }
- {
- if(!h){
- gh(k);
- print h;
- }
- s = FS
- for(n=1;n<=c;++n)
- s= s $an[n] FS
- print s
- }
复制代码
|
|