Executar o comando em cada linha e exportar da mesma maneira

1

Eu tenho várias strings em um arquivo, para cada uma eu preciso executar um comando e exportar os resultados. Aqui está uma ilustração:

arquivo.txt

string1
string2
string3

Estou correndo:

while read in; do sigtool --hex-dump "$in"; done < file.txt > test.txt

Isso fornece a seguinte saída:

737472696e6731a737472696e6732a737472696e6733

Eu gostaria que a saída fosse separada por linhas como abaixo:

737472696e6731
737472696e6732
737472696e6733

Como posso conseguir isso?

    
por mirsad 22.12.2017 / 03:32

2 respostas

4

Você quer novas linhas. Então, crie novas linhas.

while read in; do sigtool --hex-dump "$in"; echo; done < file.txt > test.txt

Observe o comando echo adicionado.

Lembre-se, o primeiro lugar que eu verificaria seria a página sigtool man para ver se há uma opção para gerar novas linhas finais.

Ok, escrevi o acima sem realmente obter sigtool (do pacote clamav ) e testando-o. Agora eu fiz isso.

O código que você escreveu não funciona, pelo menos não com o clamav-0.99.2-3.el6.x86_64. sigtool aceita entrada em sua entrada padrão. Não tem opção de aceitar e traduzir argumentos de linha de comando.

Então, o que você realmente quer é voltar ao antigo editor não visual favorito ex :

printf '%s\n' 'g/^/.!tr -d \n | sigtool --hex-dump' %p | ex file.txt > test.txt

Demonstração:

$ cat file.txt 
string1
string2
string3
$ printf '%s\n' 'g/^/.!tr -d \n | sigtool --hex-dump' %p | ex file.txt > test.txt
$ cat test.txt 
737472696e6731
737472696e6732
737472696e6733
$ 

Explicação:

Globalmente (para cada linha correspondente a regex /^/ , que é toda linha), filtre cada linha ( .! ) através do pipeline de shell tr -d \n | sigtool --hex-dump e imprima ( p ) o buffer inteiro ( % ) à saída padrão e não salve as alterações em file.txt .

Outra abordagem, usando o Awk:

awk -v p='sigtool --hex-dump' '
  {printf "%s", $0 | p; close(p); printf "\n"}
' file.txt > test.txt
    
por 22.12.2017 / 03:52
1

Força bruta alternativa:

cat test.txt | sigtool --hex-dump | sed 's/0a/\n/g' > gzout.hex

Basta converter as novas linhas hexadecimal de volta, desde que você esteja lidando com um arquivo de texto ASCII.

(Se você está lidando com não-ASCII, você pode ter 0a aparecendo no despejo hexadecimal sem significar uma nova linha na entrada.)

    
por 22.12.2017 / 07:37

Tags