Использование awk для извлечения текста из grep match и размещения рядом - PullRequest
1 голос
/ 09 марта 2019

У меня есть куча .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, чтобы сделать это?

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Это не красиво (или просто), но делает то, что вы просите:

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
0 голосов
/ 09 марта 2019

Если у вас есть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...