Imprimindo colunas usando o AWK?

1

Eu tenho aproximadamente 7 colunas em cada linha, quero imprimir duas colunas específicas e as colunas restantes após a última especificada, por exemplo:

awk -F: {' print $2 ":" $6 '} a.txt

imprime as colunas 2 e 6 de a.txt . Como eu iria então imprimir as colunas restantes depois de $ 6?

Então, um exemplo de entrada / saída seria:

    column2:column6:column7:column8:column9... 
    
por guest 14.07.2018 / 08:50

3 respostas

1

Você pode usar cut : echo 1:2:3:4:5:6:7:8:9:10|cut -d: -f 2,6- .

    
por 14.07.2018 / 09:12
1

Isso faz o que você deseja se precisar usar awk :

$ awk 'BEGIN{FS=":"; OFS=":"}{$1=$3=$4=$5="";gsub("^"FS,"",$0);gsub(FS"+",FS,$0)}1' <your file>
  • Os trabalhos acima dividem tudo em campos por meio de BEGIN{FS=":"; OFS=":"} .
  • Em seguida, ele limpa os campos 1,3,4, & 5, definindo-os como "" .
  • Os comandos 2 gsub limpam as coisas removendo quaisquer dois pontos ( : ) que podem começar no início. = O segundo gsub remove quaisquer sequências de dois pontos ( : ) da sequência restante em $0 .
  • Por fim, imprimimos os resultados por meio do 1 .
por 14.07.2018 / 09:18
0
 perl -F: -pale '$"=":"; $_ = "@F[1,5..$#F]"' input-file.txt

 awk -F: '
    {
       a = $2
       for ( i = 6; i <= NF; ++i )
          $(i-5) = $(i)
       NF -= 5
       print a, $0
    }
 ' OFS=":" input-file.txt

 sed -e '
    s/^/:/;s/:/\n/6
    h;s/.*\n//
    x;s/\n.*//
    s/$/:/
    s/^://;s/:/\n/2
    s/^/:/;s/:/\n/2
    s/.*\n\(.*\)\n.*//
    G;s/\n/:/
  '  input-file.txt
    
por 15.07.2018 / 19:52

Tags