OSX - "сортировка" по 1-му символу, попытка - PullRequest
0 голосов
/ 08 сентября 2011

У меня OSX 10.6.8

У меня проблемы с сортировкой текстового файла по первому символу.

Я объединяю три файла в один, и мне нужен конечный результат, отсортированный по первой букве алфавита.Каждый файл имеет строки, которые выглядят следующим образом:

A025-001                                            
A118-001                                            
A118-002                                        
B657-001                                            
D316-001                                        

Таким образом, файл после объединения через "cat" выглядит так:

A025-001
....
A025-001 (where file 2 was appended)
....
A025-001  (where file 3 was appended)

Я пробовал "sort -k 1.1,1.1 result.txt> sortedresult.txt "и с большим количеством других опций на странице руководства: i, b, f, s (просто догадываясь в надежде, что я нашел правильный)

Iнужно, чтобы все записи были размещены рядом друг с другом:

A025-001

A025-001

B.......

B.......

D.......

Надеюсь, кто-то более знающий, чем вы, может помочь мне решить эту проблему.

Спасибо

Обновление:Сами файлы данных не работают с инструментами Unix.Если я присматриваю файл результатов, отображается только несколько строк из многих.Открытие их в "vim" показывает набор символов ^ M.Кажется, что сортировка не проходит через весь файл.

В верхней части находится заголовок столбца с полями в кавычках, разделенных табуляцией, например, "Продукт" \ t "Категория" \ t Остальные данные разделены табуляцией, но без кавычек.пример od -c:

    0000000    "   P   r   o   d   u   c   t       N   u   m   b   e   r   "
    0000020   \t   "   L   o   o   k   u   p       A   t   t   r   i   b   u
    0000040    t   e       1       G   r   o   u   p   "  \t   "   L   o   o
    0000060    k   u   p       A   t   t   r   i   b   u   t   e       1    
    0000100    N   a   m   e   "  \t   "   L   o   o   k   u   p       A   t
    0000120    t   r   i   b   u   t   e       1       V   a   l   u   e   "
    0000140   \t   "   L   o   o   k   u   p       A   t   t   r   i   b   u
    0000160    t   e       1       V   a   l   u   e       I   m   a   g   e
    0000200    "  \t   "   L   o   o   k   u   p       A   t   t   r   i   b

Вот некоторые данные (не заголовок столбца):

    0000660   "    \n  A   0   2   5   -   0   0   1  \t   F   a   c   e   t
    0000700   \t   F   a   c   e   t   C   o   l   o   r  \t   B   l   u   e
    0000720   \t   C   C   D   D   D   D  \t   O   P   T   I   O   N  \t  \r

Кто-нибудь знает, почему он это делает?

Обновление № 2: файлы были экспортированы из FileMaker как ASCII.Вы увидите множество дополнительных вкладок, просто проигнорируйте их, как только мы выясним это, я их вычеркну.Вот весь файл вместе с hexdump и od -c файла: pastebin.com/UzaUgG6C

Ответы [ 4 ]

1 голос
/ 12 сентября 2011

Глядя на вставку, кажется, что FileMaker завершает заголовки столбцов с помощью \ n и разделяет ваши записи с помощью \ r. Сначала нужно нормализовать окончания строк.

cat result.txt | tr '\r' '\n' | sort
1 голос
/ 12 сентября 2011

Я думаю, что проблема только в окончаниях строк. Символы ^M означают возврат каретки. Инструменты UNIX, как правило, ожидают переносы строки и возврата каретки не происходит. Попробуйте ответить на этот вопрос или попробуйте запустить mac2unix, если он у вас есть.

0 голосов
/ 08 сентября 2011

Попробуйте

 sort -k1.1,1.2  result.txt > sortedresult.txt

Надеюсь, это поможет.

PS, поскольку вы выглядите новым пользователем, если вы получите ответ, который поможет вам, не забудьте пометить его как принятый,и / или дайте ему + (или -) в качестве полезного ответа.

0 голосов
/ 08 сентября 2011

Вы должны попробовать просто:

cat file1.txt file2.txt file3.txt | sort > result.txt

с использованием -k 1.1,1.1 не будет использоваться, так как есть только одно поле

Чтобы сделать его стабильным, то есть группазаписи, для которых первые символы одинаковы, сохранят относительный порядок, можно использовать переключатель -s с переключателем -k 1.1,1.1.

cat file1.txt file2.txt file3.txt | sort -s -k 1.1,1.1 > result.txt

Я думаю, что это решение, которое вам нужно.1012 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...