對製表符分隔檔案進行排序/計數

對製表符分隔檔案進行排序/計數

我有一個包含多列的製表符分隔檔。我想增加在 A 列中看到某些內容的次數,並在新的 B 列中列印與 A 列中的值關聯的資料。

前任:

1 blue                                        
1 green
1 red            
100 blue           
100 red

我想要一個輸出文件,內容如下

3 1 blue,green,red
2 100 blue,red

有沒有辦法使用 awk 或 perl 來做到這一點?

答案1

在 awk 中:

{
  if (count[$1] == "") {
    count[$1] = 1;
    results[$1] = $2;
  } else {
    count[$1] = count[$1] + 1;
    results[$1] = results[$1] "," $2;
  }
}
END {
  for (number in count) {
    print count[number],number,results[number];
  }
}

結果是: 2 100 blue,red 3 1 blue,green,red

對於上面的範例資料。

結果的順序可能不完全是您想要的,我不確定這對您有多重要。

答案2

這是我嘗試過的可能對你有用的方法。注意:"\011"= 製表符,更改" "為空格)

awk 'BEGIN { s = "\011"; c = "," ; cnt = 0; all_colors = "" } {
    if ( NR == 1 ) { num = $1; colors[cnt++] = $2 }
    else {
        if ( num != $1 ) {
            for (x=0; x<cnt; x++) {
                all_colors = all_colors colors[x]
                }
            print cnt s num s all_colors; cnt = 0; all_colors = ""
            num = $1; colors[cnt++] = $2
            }
        else { colors[cnt++] = c $2 }
        }
    }
END {
    all_colors = ""
    for (x=0; x<cnt; x++) { all_colors = all_colors colors[x] }
    print cnt s num s all_colors
}' tab_file

   tab_file                output
1       blue          3       1       blue,green,red
1       green         2       100     blue,red
1       red
100     blue
100     red

相關內容