O comando Colar não é um para um

0

Eu tenho um arquivo chamado phone_dir.txt (2 linhas, por exemplo):

ADAMS, Andrew 7583
BARRETT, Bruce 6466

Eu tento extrair os sobrenomes e capitalizá-los, a saída necessária é:

Adams
Barret

Eu só posso usar comandos como:

  • recortar
  • colar
  • tr

Eu tentei executar o seguinte script, mas os resultados são inconsistentes:

cut -c1 phone_dir.txt > last_names.txt | cut -f1 -d',' phone_dir.txt | cut -c2- | tr A-Z a-z | paste last_names.txt - | tr -d [:blank:]

Às vezes, a saída é:

Adams
Barret

E às vezes

dams
arret

Por que os resultados são inconsistentes?

    
por Dor Shmaryahu 06.12.2016 / 19:31

1 resposta

1

Se você tiver permissão para criar um arquivo temporário, que tal isso?

in=phone_dir.txt
out=last_names.txt
tmp=$$tmp && \
a=$(cut -d',' -f1 "$in" | tee >(cut -c2- | tr [:upper:] [:lower:] > "$tmp") | cut -c1) && \
paste  <(printf "%s\n" ${a[@]}) "$tmp" | tr -d [:blank:] > "$out" && \
rm "$tmp"
    
por 06.12.2016 / 20:50