[英]Using awk to extract text from grep match and place side by side
我在一個目錄中有一堆.jks
文件。 我想提取別名,從日期和到期日期開始有效。 現在我有以下幾點:
for f in *; do if [ -f $f ]; then echo "" |keytool -list -v -keystore $f | grep -e "Alias name:" -e "Valid from:"; fi done
這將輸出類似
Alias name: somehostname.com
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
.
.
.
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
每個別名至少有 1 個證書,但最多有n
證書。
我希望上述輸出格式如下:
somehostname.com \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT 2022
{empty} \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT 2022
.
.
.
{empty} \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT 2022
{empty}
表示用於對齊的空格。 \\t
表示TAB
符分隔符。
這將是一個.jks
文件的最終輸出。
我想對目錄中的所有.jks
文件執行此操作。
如何使用 awk 修改我現有的命令行腳本來執行此操作?
這並不漂亮(或簡單),但可以滿足您的要求:
cat sam.awk
/Alias name:/ {
count=0
l=length($3);
printf "%s ", $3
}
/Valid from:/ {
count++;
gsub(/Valid from:/, "\\t");
gsub(/until:/, "\\t");
space=0
if(count!=1) {
space=l-4
printf "{empty}"
};
printf " %*s %s %s %s %s %s %s %s %s %s %s %s %s\n",space,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15
}
因為我沒有任何 jsk 文件可以播放,所以我將您的實際輸出作為我實驗的輸入(為了模擬多個文件的輸出,我復制了一個條目並更改了主機名):
cat sam
Alias name: somehostname.com
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Alias name: hostname.com
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
像這樣調用awk -f sam.awk sam
它給出了以下內容:
awk -f sam.awk sam
somehostname.com \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT
{empty} \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT
{empty} \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT
hostname.com \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT
{empty} \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT
{empty} \t Wed Mar 01 00:00:00 GMT 2019 \t Wed Mar 01 00:00:00 GMT
如果您有GNU awk
,並使用空格來填充而不是{empty}
,可以這樣做:
awk 'BEGIN{RS="Alias name: *";FS="Valid from: *";}FNR>1{gsub(/until:/,"\t");gsub(/\n/,"");print $1 "\t" $2; i=3; while($i){for(j=0;j<length($1);j++)printf " "; print "\t" $i; i++;}}' file
有了這個file
:
Alias name: somehostname.com
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Valid from: Tue Feb 01 00:00:00 GMT 2019 until: Sat Jun 01 23:00:00 GMT 2062
Alias name: another.com
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Alias name: yetanother.com
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
Valid from: Wed Mar 01 00:00:00 GMT 2019 until: Wed Mar 01 00:00:00 GMT 2022
產生這個輸出:
somehostname.com Wed Mar 01 00:00:00 GMT 2019 Wed Mar 01 00:00:00 GMT 2022
Wed Mar 01 00:00:00 GMT 2019 Wed Mar 01 00:00:00 GMT 2022
Tue Feb 01 00:00:00 GMT 2019 Sat Jun 01 23:00:00 GMT 2062
another.com Wed Mar 01 00:00:00 GMT 2019 Wed Mar 01 00:00:00 GMT 2022
yetanother.com Wed Mar 01 00:00:00 GMT 2019 Wed Mar 01 00:00:00 GMT 2022
Wed Mar 01 00:00:00 GMT 2019 Wed Mar 01 00:00:00 GMT 2022
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.