Bash 按序号排序
我希望这些行按照序号(每行的最后两位)进行如下排序,max seq是03,03之后我需要相同交换机id的seq 01(行A、B中的第一个字符): 上面的列表实际上是ls命令的输出。 我有来自不同开关(A、B、C)的文件。它们的第三个字段是序列号。对于每个文件,我都需要使用ile的名称来做其他事情。Bash 按序号排序,bash,unix,sed,awk,Bash,Unix,Sed,Awk,我希望这些行按照序号(每行的最后两位)进行如下排序,max seq是03,03之后我需要相同交换机id的seq 01(行A、B中的第一个字符): 上面的列表实际上是ls命令的输出。 我有来自不同开关(A、B、C)的文件。它们的第三个字段是序列号。对于每个文件,我都需要使用ile的名称来做其他事情。 但这应该一次一个开关完成,我也需要按顺序完成(考虑第三个字段)。如果序列为最大值,则我需要使用01作为序列的文件,但文件与之前的01序列文件不同。需要重复此步骤,直到同一开关的所有文件都结束。假设预期
但这应该一次一个开关完成,我也需要按顺序完成(考虑第三个字段)。如果序列为最大值,则我需要使用01作为序列的文件,但文件与之前的01序列文件不同。需要重复此步骤,直到同一开关的所有文件都结束。假设预期输出为近似值(即示例输出中的第二列可能不同):
我没有彻底测试脚本,但是…问题一点也不清楚。是否也要按第一列进行排序?为什么
A_bcd_01
紧随其后A_jfc_03
?我想先用第一列进行排序,然后用第三列分别对A和B进行排序。我不在乎第二列仍然无法解释为什么B_mdd_01
出现在B_dlf_03
之后。我很确定“sorted”是个错误的词。我不确定什么是正确的词,但弄清楚这一点可能是解决问题的关键。对不起,你的问题仍然不清楚。请解释“为什么B_mdd_01排在B_dlf_03之后”,或者这种情况无关紧要?我们能完全忽略第二栏吗?这个例子显示了两个相互分离的B_*01,看起来不像是这样。第二列是否有意按相反顺序排序?陛下否,因为在A部分中,第2列的排序正常。你看到我们的困惑了吗?祝你好运
A_xyz_01
B_mdd_01
A_djk_02
A_jfc_03
B_dmk_01
A_bcd_01
B_csd_02
B_dlf_03
A_jhf_02
B_dld_02
A_xyz_01
A_djk_02
A_jfc_03
A_bcd_01
A_jhf_02
B_dmk_01
B_csd_02
B_dlf_03
B_mdd_01
B_dld_02
awk -F_ '{
print $0, b[$3, $1]++
}' OFS=_ infile |
sort -t_ -k1,1 -k4,4n -k3n |
cut -d_ -f1-3