shell script - lendo da entrada padrão versus um arquivo

0

Eu tenho o seguinte arquivo de entrada em.txt:

um
b
c
um
b
c

Eu tenho o seguinte script test.sh:

# display unique rows
while read line
do 
  echo $line
done < $(cat "$@" | sort | uniq) 

# display all rows
while read line
do 
  echo $line
done < $(cat "$@") 

Eu sei que posso executar o script usando:

sh test.sh in.txt

Eu também sei que posso executá-lo usando entrada padrão em vez de um arquivo. No entanto, isso só fornece entrada para o primeiro loop while. Como posso fornecer a entrada para ambos os loops sem digitar a entrada duas vezes?

    
por EggHead 19.01.2014 / 22:06

1 resposta

1

Este script aceita stdin e produz as duas saídas:

#!/bin/sh

echo "Unique rows:"
tee ~/tmpfile$$ | sort | uniq

echo "All Rows:"
cat ~/tmpfile$$

rm ~/tmpfile$$
    
por 19.01.2014 / 22:37