我有一个 csv 文件,每行有七个数字,如下所示:
1083,20,28,42,23,10,43
1084,20,5,29,59,40,33
1085,39,50,21,12,40,55
1086,45,4,6,23,10,2
1087,36,46,28,32,3,20
我想保留第一个数字(第 1 列)并对第 2 到第 7 列进行排序,使文件像
1083,10,20,23,28,42,43
1084,5,20,29,33,40,59
1085,12,21,39,40,50,55
1086,2,4,6,10,45,23
1087,3,20,28,32,36,46
我怎样才能做到这一点awk
,sed
或者其他什么?
谢谢
与
perl
:使用 GNU
awk
:或者使用
join.awk
图书馆(感谢@WeijunZhou)您面临的问题是您有带有 MAC 行结尾 (\r) 的文件,而您正在运行的命令假设 Unix 行结尾 (\n)。
使用
Perl
:选项:
-l
设置ORS
为\r
= 八进制 15。-0
设置RS
为\r
= 八进制 15。-p
将按记录循环遍历您的 csv 文件。RS 将记录从输入文件中分割出来,\r
由-0
选项设置。-F
将在读取每条记录时将字段分隔符设置为逗号。-a
将分割每条记录,因为它被读入字段并存储在数组中@F
。因此,您将获得的输出也应具有 MAC 行结尾。这就是为什么您没有看到预期的输出,而是根据此处给出的所有解决方案,您的所有输出记录都被压缩成一行。
对于简单的
csv
不引用,试试这个:尝试使用以下 awk 和 sed 的方法组合
j=
awk '{print NR}' filename | sort -nr| sed -n '1p'
输出