如何在 AWK 中打印模式化字段分隔符的匹配值

如何在 AWK 中打印模式化字段分隔符的匹配值

在下面的命令中,

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

这里FS打印[0-9]+..但是,我希望awk通过该字段分隔符打印匹配的值,例如“99”。 。知道我该怎么做吗?

下面说abc.txt这个。我想用数字分隔第二个句子。 asFS并打印该数字。在输出中。基本上想要打印...的值FS...这种需求在几个地方都遇到过。

14. Animals  20. features           
1. tiger   1. wild animal
2. cat     2. domestic animal
3. parrot  3. bird with wings

答案1

FS你不想要;的值您想要匹配的字符串FS(可以是同一行上的不同字符串):

> 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._,

答案2

gawk喜欢FPAT为了这

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

相关内容