Reutilize a saída do comando 1 no comando 2 usando um pipe

0

Eu tenho um comando no linux que retorna uma lista de números. Agora eu preciso desses números para formar um caminho de diretório e catar o arquivo localizado nesse caminho. Por exemplo: myCommand retorna:

1 
10
30 
40

E eu quero cat todos os arquivos que se parecem com isso:

 /folder/1/folder2 
 /folder/10/folder2 
 /folder/30/folder2
 /folder/40/folder2

Espero que fique claro o que eu quero, se não, fique à vontade para perguntar. Este é o meu código agora:

 myCommand | xargs cat

Mas obviamente não funciona, já que os diretórios 1,10,30 e 40 não existem.

Eu quero que a saída seja: o valor enviado - número gerado pelo myCommand

    
por user2815780 16.02.2015 / 16:57

3 respostas

1

Não há problema em fazer algo com xargs

myCommand | xargs -I{} sh -c 'echo -n {}\ ; cat /folder/{}/folder2/file'

Mas mais sintaxe e muito flexível, faça isso com for loop:

for genpath in $(myCommand)
do
    echo -n $genpath\ 
    cat /folder/$genpath/folder2/file
done

Ou até mesmo através de while loop

while read genpath
do
    echo -n $genpath\ 
    cat /folder/$genpath/folder2/file
done < <(myCommand)
    
por 16.02.2015 / 18:07
0

Você pode usar -I com xargs para substituir um marcador de posição em seu comando:

myCommand | xargs -I % cat /folder/%/folder2
    
por 16.02.2015 / 17:06
0

Você pode tentar usar a substituição de comando com a expansão da lista de colchetes:

cat /folder/["$(myCommand)"]/folder2

Exemplo com printf como um comando:

$ mkdir dir1 dir2 dir3
$ echo a > dir1/file
$ echo b > dir2/file
$ echo c > dir3/file
$ cat ./dir["$(printf "%s\n" {1..3})"]/file
a
b
c
    
por 16.02.2015 / 17:12

Tags