在第二列中按姓氏排序

在第二列中按姓氏排序

我正在尝试对包含如下条目的文件进行排序:

Essie    |   Vaill   |    14225 Hancock Dr       |      Anchorage  |   AK  |   99515 907-345-0962

请注意“|”代表各种尺寸的标签。我试图按第二个字段对此进行排序,在本例中是按字母顺序排列的姓氏。我尝试了几种不同的命令,例如(注意addresses.txt是文件的名称):

sort -k 2 addresses.txt
sort -t$'\t' -k2 addresses.txt
sort -t "`/bin/echo '\t'`" -k 2 addresses.txt

这些都没有给我想要的结果,在搜索互联网后,我根本找不到按照我需要的方式工作的解决方案。如果有人能帮助我找到按字母顺序对第二列进行排序的方法,我将不胜感激。

答案1

你能尝试一下吗:

sort -t"|" -k2 address.txt

我想这应该可以

答案2

Perl 中更通用的方法。如果空格的编码与常规空格或制表符不同,这可能会对您有所帮助:

perl -aF'[[:blank:]]+' -nle '
    $lines{$_}=[@F];
    END{
        print for sort { $lines{$a}[1] cmp $lines{$b}[1] } keys %lines
    }' your_file

不过,我不能保证它与sort基于 的解决方案相比将如何扩展。

相关内容