Como imprimir espaços vazios na primeira coluna usando awk ou sed

0

Aqui está o meu arquivo de entrada de amostra.

ip.txt :

john    math
        science
paul    math
        science
rosy    math
jill    science
rob     math
        science
hary    math

Saída desejada:

john

paul

rosy
jill
rob

hary

Quando eu uso:

awk '{print $1}' ip.txt

Minha saída é:

john
science
paul
science
rosy
jill
rob
science
hary

Eu não quero os valores da segunda coluna impressos, quero que os espaços em branco sejam impressos em um arquivo.

Como posso conseguir isso? Estou usando o Solaris 5.10 com ksh .

    
por ayrton_senna 16.07.2015 / 20:12

3 respostas

4

awk:

awk '{print (NF>1) ? $1 : ""}' file

Se o número de campos for maior que 1, imprima o primeiro campo, caso contrário, imprima uma linha vazia.

Algumas reflexões extras:

  • Se seus dados estiverem separados por tabulações,

    awk -F '\t' '{print $1}' file
    
  • Se você deseja extrair os primeiros 8 caracteres

    awk '{print substr($0,1,8)}' file
    
por 16.07.2015 / 20:31
1

Com o POSIX sed:

sed -e 's/^\([^[:blank:]]*\)[[:blank:]].*//;t' -ed <file
    
por 16.07.2015 / 20:29
1

Se você quiser todos os espaços extras antes do campo assunto, faça:

grep -o "^[^ ]* \+" ip.txt

Se você não quiser os espaços extras:

sed 's/ \+.*//' ip.txt

Ambos preservarão linhas com campos de nome vazios.

    
por 16.07.2015 / 20:30