Awk 将排序序号显示为列表中的计数

Awk 将排序序号显示为列表中的计数,awk,ordinals,Awk,Ordinals,我有以下输入文件 system info com1 command set system info com2 command set system command set1 information description test system command 21-22 information description pass system command T1-T2-T3 information description file system command commonset infor

我有以下输入文件

system info com1 command set
system info com2 command set 
system command set1 information description test
system command 21-22 information description pass
system command T1-T2-T3 information description file
system command commonset information description info
和下面的命令

awk '/system command/&&/information description/ { gsub("\"","") ; print ++ OFS") Command = " $3}' inputfile.txt
给我以下输出

1) Command = set1
2) Command = 21-22
3) Command = T1-T2-T3
4) Command = commonset
有没有办法让我的命令列表计数不是简单的数字而是排序序数 并且有这样的输出

1st) Command = set1
2nd) Command = 21-22
3rd) Command = T1-T2-T3
4th) Command = commonset

没有生成函数来获取序号。我们需要把手弄脏并编写以下代码:

awk'函数序号(i,mod,str){mod=i%10;str=i;if(i~/1[1-3]$/)str=str“th”;else if(mod==1)str=str“st”;else if(mod==2)str=str“nd”;else if(mod==3)str=str“rd”;else-str=str“th”返回str;}/system命令/&/information description/{gsub(/,“,”);print ordinal(++i)”命令=“$3}”文件
第一)命令=set1
第二)命令=21-22
第三)命令=T1-T2-T3
第四)命令=commonset
扩展形式:

awk'
函数序号(i,mod,str){
mod=i%10
str=i
如果(i~/1[1-3]$/)#对于以11、12、13结尾的数字
str=str“th”
否则如果(mod==1)
str=str“st”
否则如果(mod==2)
str=str“nd”
否则如果(mod==3)
str=str“rd”
其他的
str=str“th”
返回str
}
/系统命令/&&/信息说明/{
gsub(/“/,”)
打印序号(++i)”)命令=“$3
}"档案"
实现上述功能的另一种方法是:

function ordinal(num,   idx, sfxs) {
   split("st nd rd th",sfxs," ")
   idx = ( (num ~ /[123]$/) && (num !~ /1[123]$/) ? num % 10 : 4 )
   return num sfxs[idx]
}