Enquanto lida do arquivo com o número de sequência

0

Eu quero escrever um arquivo usando o comando echo. O eco recomendado receberá dados do arquivo anterior.

Aqui está o comando echo:

echo '{
       name: $name
       id: $seq
       }

Eu tenho um arquivo txt:

customer 1
customer 2
customer 3

Então eu quero gerar um arquivo fazendo eco e substituir $ name da primeira linha do arquivo txt.

E depois substitua $ seq por 1.

Este é o arquivo que eu quero.

{
       name: customer 1
       id: 1
       }
{
       name: customer 2
       id: 2
       }
{
       name: customer 3
       id: 3
       }

Durante a leitura da primeira linha, o ID deve ser 1, ao ler a segunda linha, o ID deve ser 2 '

    
por SQLadmin 06.03.2018 / 14:00

2 respostas

3

tente

 awk '{printf "{\n\tname: %s\n\tid: %d\n\t}\n",$0,NR}' file.txt

onde

  • printf pula a linha, adiciona a guia e formata a string.

para o argumento id: , você pode usar o segundo campo em seu arquivo de amostra ou gerar um a partir do número da linha (que é o valor NR (Number of Record)).

    
por 06.03.2018 / 14:11
2

Se você quiser uma saída formatada em JSON adequada:

jq -Rs 'split("\n") |
        .[0:-1]     |
        [ foreach .[] as $customer ( 0; .+1; { name: $customer, id: . } ) ]' ./file

ou mais curto,

$ jq -Rs '[ foreach split("\n")[0:-1][] as $customer ( 0; .+1; { name: $customer, id: . } ) ]' ./file

Com -Rs , lemos texto bruto não formatado como uma única sequência de caracteres. Isso é dividido em novas linhas em uma matriz com split("\n") e como obtemos um valor vazio no final da matriz, removemos-lo com .[0:-1] (isso seleciona todos os elementos do primeiro para o segundo para o último).

Com os mesmos dados de entrada da pergunta, agora temos

[
  "customer 1",
  "customer 2",
  "customer 3"
]

Em seguida, iteramos os valores dessa matriz com cada elemento em $customer e o iterador em . e construímos uma matriz de objetos com name e id de acordo.

O resultado é

[
  {
    "name": "customer 1",
    "id": 1
  },
  {
    "name": "customer 2",
    "id": 2
  },
  {
    "name": "customer 3",
    "id": 3
  }
]
    
por 06.03.2018 / 18:59

Tags