Inserir variável na linha variável usando sed ou awk [closed]

0

eu tenho duas variáveis (txt e um número de linha) eu quero inserir meu texto na linha x

card=$(shuf -n1 shuffle.txt)
i=$(shuf -i1-52 -n1)

'card' é meu txt: um card selecionado aleatoriamente em um baralho 'deck' e eu quero inseri-lo em uma linha aleatória (i)

    
por Larotule 29.01.2018 / 22:25

2 respostas

0

Dado que txt é atribuído ao texto que você deseja adicionar e que i é atribuído ao número da linha na qual inserir o texto, isso gerará o resultado desejado:

$ awk -v line="$i" -v text="$txt" '{print} NR==line{print text}' /path/to/textfile

Uma pequena modificação para adicionar text ao número de linha especificado (além do texto já existente), em vez de adicioná-lo após a linha existente i (em uma linha por sua próprio) como o código acima faz:

$ awk -v line="$i" -v text="$txt" ' NR!=line{print} NR==line{print $0 text}' /path/to/textfile
    
por 29.01.2018 / 22:37
0

Usar um arquivo como sua estrutura de dados incorrerá em algumas penalizações de desempenho pesadas em seu aplicativo, mas você pode inserir o conteúdo da variável foo no número da linha i em file.txt da seguinte maneira:

printf '%s\n' "${i}i" "$foo" . x | ex file.txt

Se a variável foo contiver novas linhas, isso terá alguns casos limites, mas, caso contrário, funcionará independentemente de quaisquer caracteres especiais, etc., fornecendo apenas que a variável i tenha um número de linha válido (ou seja, não seja maior que o número de linhas em file.txt ).

Mas, novamente, usar números de linha de arquivos como sua estrutura de dados é uma maneira terrivelmente ineficiente de embaralhar um baralho de cartas. Então, cuidado.

    
por 29.01.2018 / 22:37

Tags