Linux 排序-如果某些列中缺少值怎么办?

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命令根据第5列对表格文件进行排序,但是,第3列中缺少一些值。我注意到sort命令不能与-k5,5一起正常工作,但是-k1,1或-k2,2没有问题。是因为缺少值吗?

默认情况下,
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的两个字符的字符串。文件在