使用awk匹配2019年创建的KMS密钥时如何同时输出对应密钥ID
方案1:调整原有awk逻辑实现
你现有命令的问题是仅匹配并打印了符合条件的createdAt行,没有关联存储对应的密钥ID记录。假设ksctl输出的单条密钥记录顺序为id在前、createdAt在后,修改后命令如下:
./ksctl keys list -l 100 | egrep -w 'id|createdAt' | awk '/"id"/ {save_id=$0} /"createdAt"/ && $2 ~ /"2019/ {print $0; print save_id}' > keylist.txt
逻辑说明:
- 先移除
egrep中不需要的name字段筛选,减少无关数据处理 - awk运行时,每次匹配到
id行就将整行内容暂存到save_id变量 - 匹配到
createdAt行且年份为2019时,先打印当前时间行,再打印之前暂存的对应ID行
如果你的ksctl输出顺序是createdAt在前、id在后,调整awk逻辑即可:
./ksctl keys list -l 100 | egrep -w 'id|createdAt' | awk '/"createdAt"/ && $2 ~ /"2019/ {save_ct=$0} /"id"/ && save_ct != "" {print save_ct; print $0; save_ct=""}' > keylist.txt
方案2:用jq处理更稳妥(推荐)
如果ksctl输出的是标准JSON格式,直接用jq筛选不会受字段顺序变化影响,兼容性更好:
./ksctl keys list -l 100 | jq '.[] | select(.createdAt | startswith("2019")) | {"createdAt": .createdAt, "id": .id}' > keylist.txt
内容的提问来源于stack exchange,提问作者Cruhrup96
相关产品推荐
相关产品推荐

