如何通过列名获取特定行的值?

如何通过列名获取特定行的值?

这是该命令的输出,aws iam get-credential-report --query 'Content' --output text | base64 -d从该输出中如何 grep用户名access_key_1_active和的值?access_key_1_last_rotatedmahi-user

user,arn,user_creation_time,password_enabled,password_last_used,password_last_changed,password_next_rotation,mfa_active,access_key_1_active,access_key_1_last_rotated,access_key_1_last_used_date,access_key_1_last_used_region,access_key_1_last_used_service,access_key_2_active,access_key_2_last_rotated,access_key_2_last_used_date,access_key_2_last_used_region,access_key_2_last_used_service,cert_1_active,cert_1_last_rotated,cert_2_active,cert_2_last_rotated
<root_account>,arn:aws:iam::929815623526:root,2020-04-13T07:32:24+00:00,not_supported,2020-07-24T04:03:37+00:00,not_supported,not_supported,false,true,2020-07-17T05:20:25+00:00,N/A,N/A,N/A,true,2020-06-26T10:12:43+00:00,2020-07-24T06:20:00+00:00,us-east-1,s3,false,N/A,false,N/A
mahi-user,arn:aws:iam::929815623526:user/mahi-user,2020-07-21T06:21:51+00:00,true,no_information,2020-07-21T06:21:53+00:00,N/A,false,true,2020-07-21T06:21:53+00:00,N/A,N/A,N/A,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A

答案1

您可以使用awk以下方式(来源):

第一创建awk如下脚本:

$ cat usr-col.awk
BEGIN { FS = "," }
NR==1 {
    for (i=1; i<=NF; i++) {
        ix[$i] = i
    }
}
NR>1 {
    if ( $1 ~ usr ) print $ix[c1], $ix[c2]
}

在哪里:

  • FS = ","将设置字段分隔符为,
  • NR==1表示如果它是表格的第一行;
  • 循环for将创建关联数组:ix[column name] = <column number>
  • NR>1表示表中任何一行的数字大于1
  • if ( $1 ~ usr )如果一行的第一个字段与变量的值匹配usr(该值可以是正则表达式),则将提供输出;
  • print $ix[c1]将输出字段 mummer 的值等于变量值提供的列名c1......

第二按如下方式使用脚本:

aws ... | awk -f usr-col.awk usr='mahi-user' c1='access_key_1_active' c2='access_key_1_last_rotated'

我没有aws命令,所以为了进行测试,我将提供的输出存储在一个文件中,还添加了几行其他用户的数据。这是我做的一个测试 - 它在两个任意列(和)内搜索多个用户(mahi-user和)的数据:spasarnpassword_enabled

$ cat aws.output | awk -f usr-col.awk usr='mahi-user|spas' c1='arn' c2='password_enabled'
arn:aws:iam::929815623526:user/mahi-user true
arn:aws:iam::929815623526:user/spas false

相关内容