Выберите строки с минимальным значением на основе четвертого столбца и сгруппируйте по первому столбцу в linux - PullRequest
0 голосов
/ 23 января 2020

Подскажите, пожалуйста, как выбрать строки с минимальным значением на основе четвертого столбца и сгруппировать по первому столбцу в linux?

Исходный файл

x,y,z,w
1,a,b,0.22
1,a,b,0.35
1,a,b,0.45
2,c,d,0.06
2,c,d,0.20
2,c,d,0.46
3,e,f,0.002
3,e,f,0.98
3,e,f,1.0

Файл, который я хочу как показано ниже.

x,y,z,w
1,a,b,0.22
2,c,d,0.06
3,e,f,0.002

Я пытался, как показано ниже, но это не работает.

sort -k1,4 -u original_file.txt | awk '!a[$1] {a[$1] = $4} $4 == a[$1]' >> out.txt

1 Ответ

0 голосов
/ 23 января 2020

Вы должны просто отсортировать по столбцу 4. Вам нужно хранить всю строку в массиве, а не только $4. А затем в конце выведите весь массив.

Чтобы не перепутать заголовок, я распечатываю его отдельно, а затем обрабатываю остальную часть файла.

head -n 1 original_file
tail -n +2 original_file | sort -t, -k 4n -u | awk -F, '
    !a[$1] { a[$1] = $0 } 
    END { for (k in a) print a[k] }' | sort -t, -k 1,1n >> out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...