adicionando um novo caractere de linha a uma linha

0

Gostaria de extrair o segundo campo e transpô-lo para se tornar uma linha

cat > temp1
1   73
2   74
3   75

Minha abordagem:

cut -f2 temp1 | tr '\n'  '\t' > temp2

O resultado:

temp2
73  74  75  

Compreensivelmente, há um separador de tabulação na extremidade direita da linha, mas faltando um novo caractere de linha. Existe um simples one-liner para corrigir isso?

    
por Aron 10.10.2018 / 22:26

3 respostas

1

Use paste em vez de tr :

$ cut -f2 temp1 | paste -s
73  74  75

verificar o espaço em branco invisível

$ cut -f2 temp1 | paste -s | od -c
0000000   7   3  \t   7   4  \t   7   5  \n
0000011
    
por 10.10.2018 / 22:50
1
  cat file | cut -d' ' -f2 | xargs -n3
  73 74 75

e para verificar o espaço em branco invisível por @glenn jackman

cat file | cut -d' ' -f4 | xargs -n3 |  od -c

0000000   7   3       7   4       7   5  \n
0000011
    
por 11.10.2018 / 00:27
0

A maneira mais simples de imprimir / emitir / dar uma nova linha é usar echo .

Parece bastante simples adicionar uma nova linha ao arquivo criado:

cut -f2 temp1 | tr '\ n' '\ t' > temp2    echo > > temp2

O que poderia ser feito em uma linha como:

{ cut -f2 temp1 | tr '\n'  '\t' ; echo ; } > temp2

Ou seja: se a guia à direita não for um problema. Se for, você precisa removê-lo ou evitar que ele seja gerado, qualquer coisa que você faça:

awk 'NR>1{printf( "%s\t",a)}{a=$2}END{print a}' temp1 >temp2

sed -n 's/[0-9]*[[:blank:]]*//;1{h;d};H;${g;y/\n/\t/;p}' temp1 >temp2

sed 's/[0-9]*[[:blank:]]*//' temp1 | paste -sd '\t' >temp2
    
por 11.10.2018 / 10:47