我有一個製表符分隔的文件,該文件是這樣的:我在尋找一個如何打印第1列的第一行,並基於該uique標識列第二列的最後一行3
Het 157709 157731 Cluster.90 2 +
Het 157739 157760 Cluster.90 2 +
Het 164238 164259 Cluster.97 10 +
Het 164380 164401 Cluster.97 10 +
Het 164396 164417 Cluster.97 10 +
Het 164397 164421 Cluster.97 10 +
Het 164397 164420 Cluster.97 10 +
Het 164399 164420 Cluster.97 10 +
Het 164536 164561 Cluster.97 10 +
Het 164576 164598 Cluster.97 10 +
Het 164599 164615 Cluster.97 10 +
Het 164635 164656 Cluster.97 10 +
Het 198007 198031 Cluster.125 3 +
Het 198007 198028 Cluster.125 3 +
Het 198011 198035 Cluster.125 3 +
Het 157709 157760 Cluster.90 2 +
Het 164238 164656 Cluster.97 10 +
Het 198007 198035 Cluster.125 3 +
凡在塔4每個獨特條目,我寫一個系列,其包括在第3欄爲隨後的最後一行列1和2的第一行,4:以產生如下所示的文件有效的方式,5和6.到目前爲止,我已經嘗試了以下解決方案,但它看起來效率很低:
for i in `awk '{print $4}' filename | sort | uniq`
do
fgrep -F $i -w filename | awk 'NR==1 {printf $1"\t"$2"\t"} END {print $3"\t"$4"\t"$5"\t"$6}' >>filename2
done
問題是,當我有一個巨大的文件(487559行),這需要永遠。有沒有更好的解決方案藏在別人的腦海裏?
有點縮短:'AWK」($ 4以){A [$ 4] = $ 1 FS $ 2; r [++ i] = $ 4;} {b [$ 4] = $ 3 FS $ 4 FS $ 5 FS $ 6;} END {for(k = 1; k <= i; k ++)print a [r [k]],b [r [k]]}'OFS ='\ t'文件'。但它仍然是不必要的RAM飢餓 – rici