cat marks.txt
返回
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
awk -F" " '{ print $4"\t" $0 }' marks.txt | sort | cut -f 2-
根据第四列成功对文本进行排序。
上下文:https
://stackoverflow.com/questions/17048188/how-to-use-awk-sort-by-column-3
但要模拟投票最高的答案: sort -t" " -nk4 marks.txt
但只返回:
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
为什么排序子句不起作用?
using
sort -t' '
(space character as the field seperator here) 会将每个空格视为字段分隔符,而不是将所有连续的空格视为单个分隔符,这就是为什么它没有给你你所期望的,这就是为什么给出第一个 commmad 解决方案来分隔最后一个带有专用制表符分隔符的字段,然后根据该字段进行排序,然后从输出中删除它。请注意,
-F" "
在 awk commnad 中使用 here 对命令输出或处理没有副作用,也可以将其删除;另外知道在 awk 中, using-F" "
会将任何连续的空格视为单个分隔符,而在 sort 中-t" "
会将每个空格视为单独的分隔符(awk 中的等价物是-F"[ ]"
,即将字段分隔符定义为正则表达式)。最后,您最好执行以下操作:
-F
在中使用空格和在中awk
使用-t
空格的区别sort
如下:awk -F ' '
和刚才一样awk
。单个空格是FS
(内部字段分隔符)的默认值,将导致awk
从数据中修剪侧翼空格(制表符和/或空格),并将由连续空格分隔的子字符串视为字段。sort -t ' '
会将每个空格视为分隔符。使用sort
without-t
将使实用程序以awk
与连续空白(制表符和/或空格)相同的方式将每一行划分为字段。你的第一个命令,
(施瓦茨变换)因此与
或者,
OFS
用于将输出字段分隔符设置为选项卡,(还要注意上面的补充
-n
;sort
我们希望按数字排序。)显式访问每行的最后一个字段允许其他字段具有可变编号(例如,如果它们包含空格):
您的
sort
命令可以重写为按第 4 个空格分隔的列正确地按数字排序,如下所示:这显然假设每行数据将始终包含四个空格分隔的字段。