/ / Use o awk para criar o arquivo - linux, bash, shell, awk

Use o awk para criar o arquivo - linux, bash, shell, awk

Eu tenho um arquivo que contém:

Sr. Q
01629699998
Desconhecida Nhung
011287633
...

Eu gostaria de usar isso awk "{print "BEGIN:VCARD";print "Name:"$0;print "TELEPHONE:"$0;print "END:VCARD"}" file para criar este resultado

INÍCIO: VCARD
Nome: Mr Q
TELEFONE: 01629699998
FIM: VCARD
INÍCIO: VCARD
Nome: Ms Nhung
TELEFONE: 011287633
FIM: VCARD
...

Mas o código acima não entende isso, qualquer um pode me ajudar, obrigado

Respostas:

2 para resposta № 1

Experimentar:

$ awk "{if (NR%2) printf "BEGIN:VCARDnName: %sn",$0; else printf "TELEPHONE:%snEND:VCARDn",$0}" inputfile
BEGIN:VCARD
Name: Mr Q
TELEPHONE:01629699998
END:VCARD
BEGIN:VCARD
Name: Ms Nhung
TELEPHONE:011287633
END:VCARD

Como funciona

Seu arquivo de entrada consiste em pares de linhas. A primeira linha tem um nome e a segunda um número de telefone. Assim, queremos fazer algo diferente em linhas numeradas ímpares (nome) e até linhas numeradas (telefone).

  • if (NR%2)

    Isso inicia um if declaração com um teste baseado no número de linha módulo 2.

  • printf "BEGIN:VCARDnName: %sn",$0

    Este é o comando executado para linhas ímpares.

  • else printf "TELEPHONE:%snEND:VCARDn",$0

    Isso é o que é executado para linhas pares.


0 para resposta № 2

Esta é uma opção pura bash usando printf:

$ cat list_file # I have added one more entry for explanation.
Mr Q
01629699998
Ms Nhung
011287633
Dr. Drake Ramoray
0123456789

$ OLDIFS="$IFS" # save old IFS
$ IFS=$"n"     # Set IFS to newline, because the entries are newline separated.

$ printf "BEGIN:VCARDnName: %snTELEPHONE:%snEND:VCARDn" $(<list_file)
BEGIN:VCARD
Name: Mr Q
TELEPHONE:01629699998
END:VCARD
BEGIN:VCARD
Name: Ms Nhung
TELEPHONE:011287633
END:VCARD
BEGIN:VCARD
Name: Dr. Drake Ramoray
TELEPHONE:0123456789
END:VCARD

$ IFS="$OLDIFS" # restore old IFS

Explicação:

  1. Aqui, o printf obtém 6 argumentos além da string de formato: 6 linhas separadas por caractere de nova linha (que definimos como IFS).
  2. printf, em seguida, descobre que sua string de formato contém 2 %s entradas. Então, ele divide 6 argumentos em 3 grupos de 2 argumentos.
  3. Para cada grupo, imprime a string formatada.