linux - 特定位置/列的数字排序 + 保存前列的“经典”排序
问题描述
这是我拥有的文件示例:
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 上正确显示)
Thx提前寻求帮助!
解决方案
所以你可以使用这个脚本:
#!/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
推荐阅读
- node.js - $match mongodb聚合框架_mongoose中的多条件
- python - Keras——使用 LSTM 层精度低,但没有 LSTM 时精度很好
- excel - 谷歌电子表格 - 如果另一个单元格包含 N 个字符串之一,则对单元格值求和
- c# - “DataGrid”不包含“DataSource”的定义
- dart - 错误:“Toast”是从“package:easy_alert/src/provider.dart”和“package:fluttertoast/fluttertoast.dart”导入的
- javascript - 为什么布尔值在本机反应中通过this.props返回True
- java - Java DB将数据插入表中
- html - 使用 *ngIf 更改 ion-navbar 的背景颜色
- c - 阅读 N 并打印以下内容:2,4(2 个数字);3,9,27(3 个数字)
- android - 如何找出我的本机 (ndk) 应用程序使用了多少内存?