у меня есть TSV
файл, содержащий химические названия, которые могут содержать скобки, запятые, знаки + и -, космические символы, [], {}, и т.д .:порядок сортировки с пробелами
$ cat random.txt
ACETYLTHIOCHOLINE CHLORIDE CDRD-00117030-01
ACETYLTRYPTOPHANAMIDE CDRD-00118894-01
ACETYL ISOGAMBOGIC ACID CDRD-00119007-01
ACETYLTRYPTOPHAN CDRD-00117996-01
ACETYL ISOALLOGAMBOGIC ACID CDRD-00118740-01
ACETAMINOPHEN CDRD-00116365-01
ACETAMIDE CDRD-00116997-01
ACETYLSALICYLIC ACID CDRD-00117028-01
ACETYLSALICYLSALICYLIC ACID CDRD-00115640-01
ACETYL TYROSINE ETHYL ESTER CDRD-00118256-01
Я хочу найти файл отсортирован первый столбец:
$ cat correct.txt
ACETAMIDE CDRD-00116997-01
ACETAMINOPHEN CDRD-00116365-01
ACETYL ISOALLOGAMBOGIC ACID CDRD-00118740-01
ACETYL ISOGAMBOGIC ACID CDRD-00119007-01
ACETYL TYROSINE ETHYL ESTER CDRD-00118256-01
ACETYLSALICYLIC ACID CDRD-00117028-01
ACETYLSALICYLSALICYLIC ACID CDRD-00115640-01
ACETYLTHIOCHOLINE CHLORIDE CDRD-00117030-01
ACETYLTRYPTOPHAN CDRD-00117996-01
ACETYLTRYPTOPHANAMIDE CDRD-00118894-01
что я получаю:
$ sort -k1,1 -t $'\t' -f -n random.txt > wrong.txt
$ cat wrong.txt
ACETAMIDE CDRD-00116997-01
ACETAMINOPHEN CDRD-00116365-01
ACETYL ISOALLOGAMBOGIC ACID CDRD-00118740-01
ACETYL ISOGAMBOGIC ACID CDRD-00119007-01
ACETYLSALICYLIC ACID CDRD-00117028-01
ACETYLSALICYLSALICYLIC ACID CDRD-00115640-01
ACETYLTHIOCHOLINE CHLORIDE CDRD-00117030-01
ACETYLTRYPTOPHANAMIDE CDRD-00118894-01
ACETYLTRYPTOPHAN CDRD-00117996-01
ACETYL TYROSINE ETHYL ESTER CDRD-00118256-01
Обратите внимание, что ACETYL TYROSINE ETHYL ESTER
должно быть послеACETYL ISOGAMBOGIC ACID
, тогда как ACETYLTRYPTOPHAN
должно быть доACETYLTRYPTOPHANAMIDE
.
Причина заключается в том, что join
жалуется ACETYL TYROSINE ETHYL ESTER
не сортируется (и о ACETYLTRYPTOPHAN
когда первый был зафиксирован):
Второй файл для join
:
$ cat test_data.txt
Acetamide 0.904 0.146 0.134 -0.196
Acetyltryptophan -0.558 -0.471 -0.13 -0.332
Результаты join
с wrong.txt
:
$ join -a1 -1 1 -2 1 -t $'\t' -i test_data.txt wrong.txt
Acetamide 0.904 0.146 0.134 -0.196 CDRD-00116997-01
Acetyltryptophan -0.558 -0.471 -0.13 -0.332
join: wrong.txt:9: is not sorted: ACETYLTRYPTOPHAN CDRD-00117996-01
Конечно, join
с correct.txt
работы:
$ join -a1 -1 1 -2 1 -t $'\t' -i test_data.txt correct.txt
Acetamide 0.904 0.146 0.134 -0.196 CDRD-00116997-01
Acetyltryptophan -0.558 -0.471 -0.13 -0.332 CDRD-00117996-01
Этот sort
вызов не дает мне желаемый результат либо:
$ sort -k1,1 -t $'\t' -f -V random.txt
ACETAMIDE CDRD-00116997-01
ACETAMINOPHEN CDRD-00116365-01
ACETYLSALICYLIC ACID CDRD-00117028-01
ACETYLSALICYLSALICYLIC ACID CDRD-00115640-01
ACETYLTHIOCHOLINE CHLORIDE CDRD-00117030-01
ACETYLTRYPTOPHAN CDRD-00117996-01
ACETYLTRYPTOPHANAMIDE CDRD-00118894-01
ACETYL ISOALLOGAMBOGIC ACID CDRD-00118740-01
ACETYL ISOGAMBOGIC ACID CDRD-00119007-01
ACETYL TYROSINE ETHYL ESTER CDRD-00118256-01
Как получить sort
к выходу, что я хочу?
ваш correct.txt генерируются 'родом random.txt' – haifzhan