Redirecionar um comando cat ao usar curingas como entrada

0

Eu tenho o seguinte comando que pega uma certa parte de um arquivo no diretório atual, grava em um arquivo temporário, pega parte de um outro diretório, grava em um arquivo temporário e finalmente concatena esses dois arquivos. arquivos temporários em um e envia para result :

sed -e '3003,$d' file1 > temp1;sed -n '3,$p' ../otherfile1 > temp2; cat temp1 temp2 > ../result1

Isso funciona para um arquivo, mas agora eu quero fazer isso em um diretório inteiro.

Eu pensei que usar um curinga no comando sed funcionaria:

sed -e '3003,$d' file* > temp1;sed -n '3,$p' ../otherfile* > temp2; cat temp1 temp2 > ../result*

mas é claro que não sabe automaticamente como numerar os arquivos temporários e o arquivo de saída.

Como posso usar este comando em um diretório inteiro, gerando um arquivo de resultado exclusivo para cada concatenação?

    
por Saaru Lindestøkke 16.01.2014 / 16:52

2 respostas

2

Faça isso como um loop em um shell bash em vez de passar a lista inteira para sed.

let "n = 1"
for file in *
do
  sed -e '3003,$d' $file > temp1;sed -n '3,$p' ../$file > temp2; cat temp1 temp2 > ../result${n} ;
  let "n = n + 1"
done
    
por 16.01.2014 / 17:30
1

Usando um subshell, pode-se até evitar os arquivos "temp1" e "temp2". Além disso, se os nomes dos arquivos contiverem espaços, eu costumo usar "while":

n=1
ls | while read f; do
  ( sed -e '3003,$d' $f && sed -n '3,$p' ../$f ) > ../result${n}
  n=$((n+1))
done
    
por 16.01.2014 / 22:29