Grep целая строка на основе первого термина

Я хотел бы найти довольно большой отсортированный файл (по 4-му, а затем по 3-му столбцу), найти первый раз, когда в 4-м столбце было найдено новое слово, и распечатать всю строку в новом файле. Например, мой файл выглядит так:

c1 23 1912 PE_1.7
c1 25 2334 PE_1.7
c1 59 2340 PE_1.7
c1 28 2342 PE_1.7
c1 30 2345 PE_1.7
c1 45 2346 PE_1.7
c1 23 2348 PA_11.4
c1 24 2352 PA_11.4
c1 57 2362 PA_123.2
c1 26 2372 DA_1.5

И я надеюсь, что новый файл будет выглядеть так:

c1 23 1912 PE_1.7
c1 23 2348 PA_11.4
c1 57 2362 PA_123.2
c1 26 2372 DA_1.5

Я прогнил с регулярным выражением, но я думал что-то вроде этого:

grep \t.[_].[\.]$

Есть хороший способ сделать этот тип grep, или я лаю не на то дерево, так сказать?

4 ответа

Решение

Это

uniq --skip-fields=3 input.txt 

Урожайность:

c1 23 1912 PE_1.7
c1 23 2348 PA_11.4
c1 57 2362 PA_123.2
c1 26 2372 DA_1.5

Попробуй это:

$ awk '!x[$4]++' file
c1 23 1912 PE_1.7
c1 23 2348 PA_11.4
c1 57 2362 PA_123.2
c1 26 2372 DA_1.5

Попробуйте это awk one-liner:

awk 'p!=$4{print;p=$4}' file > newFile

Проще использовать awk:

awk '!($4 in a) {a[$4]; print}' file
c1 23 1912 PE_1.7
c1 23 2348 PA_11.4
c1 57 2362 PA_123.2
c1 26 2372 DA_1.5
Другие вопросы по тегам