Como imprimir o valor correspondente do separador de campo padronizado no AWK

4

No comando abaixo,

cat abc.txt|awk -F"[0-9]+." '{print FS $3}'

Aqui FS imprime [0-9]+. . No entanto, quero que o awk imprima o valor correspondente por esse separador de campo, por ex. "99." . Alguma idéia de como posso fazer isso?

Digamos que abc.txt tenha isso abaixo. Eu quero separar as segundas frases usando o número. como FS e imprima esse número. na saída. basicamente quer imprimir o valor de FS ... tal necessidade apareceu em vários lugares.

14. Animals  20. features           
1. tiger   1. wild animal
2. cat     2. domestic animal
3. parrot  3. bird with wings
    
por Shiva 15.01.2015 / 22:16

2 respostas

2

Você não quer o valor de FS ; você quer a string que corresponde a FS (que pode ser strings diferentes na mesma linha):

> awk -F"[0-9]+." '{ printf "line %3d.: ",NR; 
  if (NF==1) { print "No FS match in this line"; next; }; str=$0; 
  for(j=1;j<NF;j++) { match(str, FS); fs_str=substr(str, RSTART, RLENGTH); 
  printf "_%s_, ",fs_str; str=substr(str, RSTART+RLENGTH)}; print ""; }' file
line   1.: _14._, _20._, 
line   2.: _1._, _1._, 
line   3.: _2._, _2._, 
line   4.: _3._, _3._,
    
por 15.01.2015 / 23:57
0

Eu gosto do FPAT do gawk para este

awk -vFPAT='[[:digit:]]+\.' 'NF{$1=$1; print}' file
14. 20.
1. 1.
2. 2.
3. 3.
    
por 23.01.2015 / 02:56

Tags