Como construir uma lista de comandos usando o awk [closed]

0

Eu tenho o script python test.py com o argumento (nome do arquivo de entrada). Eu quero executá-lo dentro de um script de shell para que eu possa construir uma lista de comandos (por exemplo, test.py --arg filename ) usando awk . Eu preparei alist.txt que contém nomes de arquivos em cada linha, eu quero que o código python tome (list.txt) como um argumento e passe por cada linha (que são os nomes dos arquivos) e execute-os.

O seguinte comando está funcionando bem, mas eu quero incluir o script test.py com os argumentos usando o resultado desta linha de comando.

awk '{print substr($0, 1, length($0)-11)}'  list.txt  
    
por abubakr yagob 22.09.2017 / 00:15

1 resposta

1

Uma solução seria ler cada saída de linha pelo comando awk em um loop e chamar test.py com cada linha como um parâmetro:

awk '{print substr($0, 1, length($0)-11)}' alist.txt |
while read -r; do
    test.py --arg "$REPLY"
done

Outra solução é usar xargs :

awk '...' list.txt | xargs -L1 test.py --arg

[para o registro: resposta alternativa, devido ao meu mal-entendido da pergunta]

O que eu entendo é que, em vez de ter test.py --arg alist.txt , você quer ter:

test.py --arg (file containing the result of your awk command)

Nesse caso, você pode salvar o resultado do seu comando awk em um arquivo e fornecer esse arquivo como um parâmetro para test.py :

awk '...' alist.txt > alist_processed_by_awk.txt
test.py --arg alist_processed_by_awk.txt
rm alist_processed_by_awk.txt

Se você estiver usando bash para seu shell, outra forma mais curta de fazer isso é usar a substituição de processo:

test.py --arg <(awk '...' alist.txt)

Aqui <(command) é substituído pelo nome de um pseudo-arquivo que contém o resultado de command .

    
por 22.09.2017 / 00:51