他の2つの列のユニークな組み合わせに基づいて列からグループを抽出する方法

他の2つの列のユニークな組み合わせに基づいて列からグループを抽出する方法

次のデータがあります。

Sample_1    Apples  Red
Sample_2    Apples  Red
Sample_3    Apples  Red
Sample_4    Apples  Red
Sample_5    Apples  Red
Sample_6    Apples  Green
Sample_7    Apples  Green
Sample_8    Apples  Green
Sample_9    Apples  Green
Sample_10   Apples  Green
Sample_11   Apples  Yellow
Sample_12   Apples  Yellow
Sample_13   Apples  Yellow
Sample_14   Apples  Yellow
Sample_15   Apples  Yellow

他の2つの列によって形成されたグループの組み合わせに基づいて、最初の列からサンプルを繰り返し抽出してサンプル1-5、6-10、および11-15を取得するにはどうすればよいですか。

私が最終的に望むのは、サンプルリスト(上記のグループなど)を他のコマンドへの入力として渡すことです。たとえば、次のようになります。

comm -23 <(sort <all_samples.txt>) <(sort <[input from above]>) > <difference.txt>

私は試した:

awk '{print $2"\t"$3}' <file.txt> | uniq

2番目と3番目の列のユニークな組み合わせを得るためには何もできないようです。特に最初の列を引くことはまさに必要です。

ベストアンサー1

これはあなたがしたいことですか?

$ awk '{vals[$2 FS $3] = vals[$2 FS $3] OFS $1} END{for (key in vals) print key vals[key]}' file
Apples Red Sample_1 Sample_2 Sample_3 Sample_4 Sample_5
Apples Green Sample_6 Sample_7 Sample_8 Sample_9 Sample_10
Apples Yellow Sample_11 Sample_12 Sample_13 Sample_14 Sample_15

それともこれではないだろうか?

$ awk -v fruit='Apples' -v color='Green' '($2==fruit) && ($3==color)' file
Sample_6    Apples  Green
Sample_7    Apples  Green
Sample_8    Apples  Green
Sample_9    Apples  Green
Sample_10   Apples  Green

おすすめ記事