Linux 排序-如果某些列中缺少值怎么办?
我想使用SORT命令根据第5列对表格文件进行排序,但是,第3列中缺少一些值。我注意到sort命令不能与-k5,5一起正常工作,但是-k1,1或-k2,2没有问题。是因为缺少值吗?默认情况下,Linux 排序-如果某些列中缺少值怎么办?,linux,bash,unix,sorting,Linux,Bash,Unix,Sorting,我想使用SORT命令根据第5列对表格文件进行排序,但是,第3列中缺少一些值。我注意到sort命令不能与-k5,5一起正常工作,但是-k1,1或-k2,2没有问题。是因为缺少值吗?默认情况下,sort认为只要有一个空格字符后跟一个非空格字符,字段就会开始。例如,在此代码段中: a b c d e f g 第一行有四个字段,第二行有三个字段 如果要使用不同的分隔符,可以使用-t选项指定。例如,要将选项卡用作分隔符,可以编写: sort -t $'
sort
认为只要有一个空格字符后跟一个非空格字符,字段就会开始。例如,在此代码段中:
a b c d
e f g
第一行有四个字段,第二行有三个字段
如果要使用不同的分隔符,可以使用-t
选项指定。例如,要将选项卡用作分隔符,可以编写:
sort -t $'\t' -k 5,5
这将允许
排序
检测空字段(因为两个连续的制表符将被解释为两个不同的分隔符,它们之间有一个空字段)。默认情况下,排序
认为只要有一个空格字符后跟一个非空格字符,字段就会开始。例如,在此代码段中:
a b c d
e f g
第一行有四个字段,第二行有三个字段
如果要使用不同的分隔符,可以使用-t
选项指定。例如,要将选项卡用作分隔符,可以编写:
sort -t $'\t' -k 5,5
这将允许
排序
检测空字段(因为两个连续的选项卡将被解释为两个不同的分隔符,它们之间有一个空字段)。如果您有时缺少列,我猜您的数据是固定格式的,即文本对齐方式如下:
1 2 3
2 23 12345
还是这个
1 2 3
2 23 12345
而不是这个
1 2 3
2 23 12345
如果这是真的,您可以使用一个实际不出现在输入中的制表符,并使用一个键(如
-t/-k1.20
)对现在的单个字段进行排序,以对从第20列开始的字符进行排序。如果您有时缺少列,我猜您的数据是固定格式的,即文本对齐方式如下:
1 2 3
2 23 12345
还是这个
1 2 3
2 23 12345
而不是这个
1 2 3
2 23 12345
如果这是真的,您可以使用一个实际上没有出现在输入中的制表符,并使用一个键对现在的单个字段进行排序,如
-t/-k1.20
,对从第20列开始的字符进行排序。似乎忽略了额外的空格,空白数据是否是关键的,还是可以尝试用一些<代码> SED >代码> AWK < /代码>魔术,并在空白中设置空白值,如<代码> <代码> >或代码> 0代码>代码,看看它是否允许<代码> -K5,5>代码>工作?如果“缺失”是“空的”,排序不能确定:它只会看到四列。“失踪”,两个连续的标签。似乎它忽略了额外的空白,空白数据是关键的还是可以尝试用一些代码> SED <代码> >代码> AWK < /代码>魔术,并在空白中放置空白值,如<代码> <代码> >或代码> 0代码>代码,看看它是否允许代码> -K5,5>代码>工作?如果“丢失”是指“你”是什么意思?空”,排序无法确定:它将只看到四列。我的意思是“缺少”,两个连续的制表符。还有一个问题:为什么在这里使用$'\t?我可以在这里使用“\t”吗?有什么区别吗?bash中的双引号字符串不专门解释转义序列。“\t”“
只是一个包含反斜杠和字母t的两个字符的字符串。文档还有一个问题:为什么在这里使用$'\t?我可以在这里使用“\t”吗?区别是什么?bash中的双引号字符串不专门解释转义序列<代码>“\t”只是一个包含反斜杠和字母t的两个字符的字符串。文件在