簡體   English   中英

使用awk從grep匹配中提取文本並並排放置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM