Poda de campos fora de um arquivo [duplicado]

0

Conteúdo do arquivo a.txt

Event: "112506400","17","2016/07/13-15-25-59.00",,,,,,,,,,,"112506400","115101234","02:00:00","pc","abc","4194","file_nam","F",,,"LA
",,"jk","123",,,,,,,,,,

Eu preciso de um arquivo que não tenha $ 20 (file_name) redirecionado para asort.txt. Existe algum comando curto como atualmente estou usando o abaixo

cat a.txt | grep Event: |awk -F, '{print $1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$21","$22","$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36","$37}'> asort.txt
    
por unix_user 29.09.2016 / 13:15

3 respostas

2

Talvez o comando de corte possa fazer:

cat a.txt | cut -d "," -f 1-19,21-37

Assim você pula o campo # 20, assumindo que a vírgula é o delimitador estável.

    
por 29.09.2016 / 13:30
0

Isso deve funcionar:

grep Event: a.txt | awk 'BEGIN{FS=OFS=","}{$20=""; print}' > asort.txt
    
por 29.09.2016 / 13:34
0

com sed

$ echo 'a,,b,c,d' | sed -E 's/^(([^,]*,){2})[^,]*,//'
a,,c,d
$ echo 'a,,b,c,d' | sed -E 's/^(([^,]*,){3})[^,]*,//'
a,,b,d
  • [^,]*, zero ou mais texto sem vírgula seguido por vírgula
  • {2} ou {3} precedendo o grupo duas ou três vezes, use o número da coluna para excluir menos um

semelhante com perl , exceto que podemos reutilizar o padrão de expressão regular

$ # (?2) refers to ([^,]*,)
$ echo 'a,,b,c,d' | perl -pe 's/^(([^,]*,){2})(?2)/$1/'
a,,c,d
$ echo 'a,,b,c,d' | perl -pe 's/^(([^,]*,){3})(?2)/$1/'
a,,b,d

$ # golfed with lookbehind
$ echo 'a,,b,c,d' | perl -pe 's/^([^,]*,){2}\K(?1)//'
a,,c,d
$ echo 'a,,b,c,d' | perl -pe 's/^([^,]*,){3}\K(?1)//'
a,,b,d
    
por 29.09.2016 / 13:56