【问题标题】:how to search for particular groups user belongs to如何搜索用户所属的特定组
【发布时间】:2017-09-07 12:51:30
【问题描述】:

我有包含 id 命令详细信息的 test.txt 文件(例如:id sudi

uid=23351(sudi) gid=5000(bns) groups=5000(bns),16382(damepgrp),15657(edl_prd_rcrr_sup),15650(edl_prd_rcrr_user),15712(edl_prd_yarn_int_cb),15721(edl_prd_yarn_int_rsk),15632(edl_prod_rcam_admin),16110(edlp_bc5m_sup)

uid=23458(achung1) gid=5000(bns) groups=5000(bns),15757(edl_prd_ice_analyst),15483(edl_prd_ice_user),15650(edl_prd_rcrr_user),15712(edl_prd_yarn_int_cb),15721(edl_prd_yarn_int_rsk)

uid=19831(afabia) gid=5000(bns) groups=5000(bns),15774(edl_prd_c360da_users),15714(edl_prd_yarn_int_ana),15712(edl_prd_yarn_int_cb),15606(edl_prod_c360_users),16179(edl_prod_c360rt_users),15621(edl_prod_dspm_dev),16076(edlp_bc4g_ca_ez_usr),16052(edlp_bc4g_ca_usr),16053(edlp_c360_da_usr),15105(hdpcmo),15104(hdpnanalytics),15279(hdpnaug),15144(rscmo),15280(rsnaug),16171(edl_prod_c360rt_susr)

如何仅打印 id 和 yarn 组作为输出。我已经用 grep 和 sed 试过了,但没有运气 例如:

 sudi: edl_prd_yarn_int_ana, edl_prd_yarn_int_cb
 achung1: edl_prd_yarn_int_cb, edl_prd_yarn_int_rsk
 afabia: edl_prd_yarn_int_cb, edl_prd_yarn_int_ana

【问题讨论】:

  • 纱线信息是否总是用双星号包裹?
  • 不,我刚刚为问题目的突出显示了 id 命令的输出如下:uid=23351(abotha) gid=5000(bns) groups=5000(bns),16382(damepgrp),15657 (edl_prd_rcrr_sup),15650(edl_prd_rcrr_user),15712(edl_prd_yarn_int_cb),15721(edl_prd_yarn_int_rsk),15632(edl_prod_rcam_admin),16110(edlp_bc5m_sup)

标签: linux awk sed


【解决方案1】:

使用

gawk

$ awk -v RS='[()]' -v OFS=, '/yarn/{s=s?s OFS $1:$1}END{print "sudi: " s}' infile
sudi: edl_prd_yarn_int_ana,edl_prd_yarn_int_cb

awk

$ awk -F'[()]' -v OFS=, '{for(i=1; i<=NF; i++)if($i~/yarn/)s=s?s OFS $i:$i}END{print "sudi: " s}' infile

输入:

$ cat infile
uid=21015(sudi) gid=5000(bns) groups=5000(bns),15714(edl_prd_yarn_int_ana),15712(edl_prd_yarn_int_cb),16083(edlp_bc4g_sup),16186(edlp_bc55_ah_da_usr1),16183(edlp_bc55_ah_da_usr2),16134(edlp_bc55_sup),16045(edlp_ds_na_usrgrp),15970(edlp_dsci_usr),15861(edlp_dsna_app),15956(edlp_pricinggtb_susr),15105(hdpcmo),15108(hdpcoe),15104(hdpnanalytics),15144(rscmo),15143(rsnanalytics),15152(rsnanalyticssec),15159(s2hdp19grp)

【讨论】:

    【解决方案2】:

    grep -oP "uid=\d+\(\K\w+(?=\))|\w+yarn\w+" file | awk '$0~/yarn/{if(!first){a=a" "$1; first=1}else{a=a" ,"$0}} $0!~/yarn/{print a; a=$0":"; first=0} END{print a}'

    输出:

    sudi: edl_prd_yarn_int_cb,edl_prd_yarn_int_rsk
    achung1: edl_prd_yarn_int_cb,edl_prd_yarn_int_rsk
    afabia: edl_prd_yarn_int_ana,edl_prd_yarn_int_cb
    

    【讨论】:

    • 是的,就是那个,如果我有 3 根或更多根纱线怎么办
    • 如果每个用户都有 3 个 yarn 字符串,则将粘贴命令更改为 paste - - - -。但是,如果用户有不同数量的纱线,例如,这将不起作用。如果 user1 有 3 根纱线,而 user2 有 4 根纱线。在这种情况下,这将失败。你想要一个通用的解决方案吗?
    • 我的用户有 2、3、4 根纱线,例如:uid=23391(xxxx) gid=5000(bns) groups=5000(bns),15714(edl_prd_yarn_int_ana),15712(edl_prd_yarn_int_cb), 15718(edl_prd_yarn_int_gbm),16110(edlp_bc5m_sup),15829(edlp_cbt_tsz_ro),15143(rsnanalytics),15152(rsnanalyticssec)这个用户有3个纱线。所以我需要一个通用的,不管它应该工作的纱线数量是多少跨度>
    • 检查更新的解决方案。从下次开始,请确保在您的问题中提供所有必要的信息,并展示您的努力。 SO 不是代码工厂。
    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多