0

我想搜索一个相当大的排序文件(第 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

4 回答 4

1

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
于 2013-10-01T14:58:15.523 回答
1

试试这个 awk 单线:

awk 'p!=$4{print;p=$4}' file > newFile
于 2013-10-01T14:58:16.310 回答
1

试试这个:

$ 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
于 2013-10-01T15:00:24.110 回答
0

使用 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
于 2013-10-01T14:58:19.563 回答