У меня есть файл, которому нужна сортировка в особенном методе, но я не могу выяснить, как сделать это.
Я попробовал следующую команду, но она не дает мне, что я хочу:
sort -t" " -k1,1 Original_File | uniq -d > Desired_Output
Original_File:
User1 US
User1 NG
User2 US
User3 US
User4 US
User4 EN
User5 US
Desired_Output:
User1 US
User1 NG
User4 US
User4 EN
Можно извлечь первый столбец, взять дубликаты и grep их назад из файла снова:
cut -f1 -d' ' Original_File | sort | uniq -d | grep -wFf- Original_File
Ввод и вывод в качестве примера был обновлен; примеры в первом разделе используют исходный вход в качестве примера для показа примеров детали на вариантах:
Исходный вход в Original_File
:
User1 US
User1 NG
User2 US
User3 US
User4 US
User5 US
Можно пропустить userN
часть для uniq
с опцией -f
пропускать ведущие поля - разделенный пространством:
$ sort -t" " -k1,1 Original_File | uniq -f 1
User1 NG
User1 US
Для того же порядка как в выводе в качестве примера можно инвертировать вид - это изменит значения "маркировки" уникальных строк:
$ sort -r -t" " -k1,1 Original_File | uniq -f 1
User5 US
User1 NG
Отметьте User5
в первой строке результата. Если это не приемлемо, просто вид снова:
$ sort -t" " -k1,1 Original_File | uniq -f 1 | sort -t" " -k1,1 -r
User1 US
User1 NG
Если UserN
часть не разделяется пространством, но имеет фиксированную длину, можно пропустить его для uniq
с опцией -s
:
$ sort -t" " -k1,1 Original_File | uniq -s 6
User1 NG
User1 US
С обновленным входом в качестве примера это - команда для создания необходимого порядка сортировки:
$ sort -t" " -k1,1 Original_File | uniq -f 1 | sort -t" " -k1,1 -k2,2r
User1 US
User1 NG
User4 US
User4 EN
это сортирует второе поле к обратному порядку.