我想按列标题(从左到右)对文件进行排序。 我想按字母数字从最小数字到最大数字排序(因此2 <10 <21 <100 ......) 我想忽略排序中的第一列(第一列将保留为第一列)。 我不希望从上到下对列进行排序。
示例输入
FirstColumn Acolumn2 Acolumn10 Acolumn1 Bcolumn2 Bcolumn1
Word pan mat toy grass bill
string tan pat boy mass phil
characters can hat coy bass ted
示例输出
FirstColumn Acolumn1 Acolumn2 Acolumn10 Bcolumn1 Bcolumn2
Word toy pan mat bill grass
string boy tan pat phil mass
characters coy can hat ted bass
答案 0 :(得分:1)
{
if ( NR == 1 )
{
for (i=2;i<=NF+1;i++)
{
cnt[i]=gensub("column","","g",$i)"*"i
}
asort(cnt)
printf $1"\t"
}
for ( i=2;i<=NF;i++ )
{
split(cnt[i],cnt1,"*")
printf $cnt1[2]"\t"
}
printf "\n"
}
以上awk代码将在一定程度上起作用。
我们首先关注第一行并忽略第一列(从2开始for循环)我们删除&#34;列&#34;字符串中的文本,然后将数据与其索引位置(用星号分隔)一起添加到数组中
然后使用我们添加到数组中的索引对此数组进行排序和循环以打印出数据。
问题是正确排序数据。标准排序将按以下顺序输出数据:
Acolumn1 Acolumn10 Acolumn2 Bcolumn1 Bcolumn2