Bash - 按非第一个字符排序

die*_*403 3 bash sorting

我想按第一列对文件进行排序,但必须从 5 个字符开始排序。我怎样才能做到这一点?

我的文件:

"TTTTCTTACA"            1       1
"TTTTCTTACC"                    1
"TTTTCTTACT"    1       1
"TTTTCTTAGC"    1
"TTTTCTTATT"                    2
"TTTTCTTCAA"    1               1       1
"TTTTCTTCAG"    1               2       1
"TTTTCTTCAT"            1       2       2
"TTTTCTTCCT"                            2
"TTTTCTTCGG"                    2       2
"TTTTCTTCTA"                            1
"TTTTCTTCTG"            1
"TTTTCTTCTT"    1                       2
"TTTTCTTGAA"            1
"TTTTCTTGCT"    1               1       1
"TTTTCTTTAA"    1
"TTTTCTTTAG"            1       1
"TTTTCTTTCT"    1
"TTTTCTTTGC"    1
"TTTTCTTTGG"            1       1
"TTTTCTTTGT"    1       1       2       1
"TTTTCTTTTA"    1
Run Code Online (Sandbox Code Playgroud)

我正在尝试:

sort -k1,1 file | uniq -s 6 -w 5 
Run Code Online (Sandbox Code Playgroud)

当然,这是行不通的。也许排序有一些标志,但我没有找到它们。你有什么想法吗?

bgS*_*k15 5

太长了;博士

sort -k1.5 file | uniq -s 6 -w 5
Run Code Online (Sandbox Code Playgroud)


解释

我的排序是 GNU coreutils 8.22。我的排序的联机帮助页显示:

KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and  C
       a  character  position  in  the  field;  both are origin 1, and the stop position defaults to the
       line's end.
Run Code Online (Sandbox Code Playgroud)

因此,对于当前的排序命令,sort -k1,1 file使用第一个单词到第一个单词作为排序。

你想要的是(无论如何对于排序命令):

sort -k1.5 file | uniq -s 6 -w 5
Run Code Online (Sandbox Code Playgroud)

这将使用第一个单词的第五个字符,这就是您想要的。