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