Text-Processing

如何根據模式列表拆分文件並將輸出文件命名為模式?

  • March 3, 2017

File1 看起來像這樣(代謝途徑:基因):

A: 1

A: 2

A: 3

B: a

B: b

C: pp

D: rr

如何獲得如下所示的輸出文件(命名為 File1.new):

A:1、2、3

B:a、b

C:pp

D:rr

我是 Linux 初學者。最好是簡單的解釋!

使用GNU 數據集

datamash -t: groupby 1 collapse 2 < file
A:1,2,3
B:a,b
C:pp
D:rr

如果你也想要計數,

datamash -t: groupby 1 collapse 2 count 2 < file
A:1,2,3:3
B:a,b:2
C:pp:1
D:rr:1

countunique如果您想要唯一欄位的數量,您也可以。

這是 awk 的工作。

awk -F: '{L[$1]=L[$1] "," $2} 
   END { for (l in L) printf "%s:%s\n",l,substr(L[l],2);}'

在哪裡

  • -F:用作:分隔符
  • {L[$1]=L[$1] "," $2}儲存由欄位 1 索引的逗號分隔值
  • END在文件末尾
  • for (l in L) 循環遍歷值
  • printf "%s:%s\n",l,substr(L[l],2);列印,跳過第一個逗號
  • 您可以使用","or ", ",相應地調整最終 substr。

awk 可以是單行的,使用

awk -F: '....' File1 > File3

要計算基因,只需添加一個 var tou 計數(此處為 G)。

{L[$1]=L[$1] "," $2;G[$1]++} 
END { for (l in L) printf "%s:%s:%d\n",l,substr(L[l],2),G[l];}

引用自:https://unix.stackexchange.com/questions/348847