gpt4 book ai didi

linux - 对特定位置/列进行数字排序 + 保存 "classic"对前几列进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:03 26 4
gpt4 key购买 nike

这是我拥有的文件示例:

C;S;tous;PMJ100;1;40;1

C;S;tous;PMJ100;1;40;11

C;S;tous;PMJ100;1;40;2

C;S;tous;PMJ100;1;60;1

C;S;tous;PMJ200;1;40;1

(其他一些文件有数千行!)

我想要的只是最后一列进行数字排序,如 1 2 ... 9 10 11 等,但它必须保存前 6 列的原始“经典”排序!所以结果应该是:

C;S;tous;PMJ100;1;40;1

C;S;tous;PMJ100;1;40;2

C;S;tous;PMJ100;1;40;11

C;S;tous;PMJ100;1;60;1

C;S;tous;PMJ200;1;40;1

尝试了我能做的一切,但在谷歌上没有找到任何有用的东西:(

(注意:空行只是为了在 stackoverflow 上正确显示)

提前感谢大家的帮助!

最佳答案

所以你可以使用这个脚本:

#!/bin/bash

# Attention!
if [ -f tosort.tmp ]
then
rm tosort.tmp
fi


if [ -f tosort_done.tmp ]
then
rm tosort_done.tmp
fi


if [ -f result.out ]
then
rm result.out
fi


# And a data file must contain a last "end" line.



nosort_previous_symb=""

while read line_data
do

tosort_symb=`echo $line_data | rev | cut -d";" -f1-1 | rev`
nosort_symb=`echo $line_data | rev | cut -d";" -f2- | rev`


if [[ "$nosort_previous_symb" == "" || "$nosort_previous_symb" == "$nosort_symb" ]]
then

echo $tosort_symb >> tosort.tmp

#refresh nosort_symb
nosort_previous_symb="$nosort_symb"


else


#old nosort_symb to out
cat tosort.tmp | sort -nk 1 > tosort_done.tmp

while read tosort_symb_done
do

echo ""$nosort_previous_symb";"$tosort_symb_done"" >> result.out

done < tosort_done.tmp


# new nosort
echo $tosort_symb > tosort.tmp


#refresh no sort
nosort_previous_symb="$nosort_symb"

fi


done < data


# Attention!
rm -f *.tmp


exit

将例如“end”添加到您的数据文件中以供使用:

C;S;tous;PMJ100;1;40;1
C;S;tous;PMJ100;1;40;11
C;S;tous;PMJ100;1;40;2
C;S;tous;PMJ100;1;60;1
C;S;tous;PMJ200;1;40;1
end

结果:

C;S;tous;PMJ100;1;40;1
C;S;tous;PMJ100;1;40;2
C;S;tous;PMJ100;1;40;11
C;S;tous;PMJ100;1;60;1
C;S;tous;PMJ200;1;40;1

关于linux - 对特定位置/列进行数字排序 + 保存 "classic"对前几列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51743019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com