查找第1列中第2列为x的所有元素

时间:2015-09-18 16:49:05

标签: awk

我有一个2x14000000数据帧,其中第1列是一系列(基本上)唯一元素,第2列是重复的。

Example.data:

rs564192510     TRIT1
rs564192510     MYCL
rs146746778     NFIA
rs142596889     KIAA1614
rs142596889     XPR1
rs4437820       NOC2L
rs7542092       NOC2L
rs28444699      NOC2L

我正在寻找一个(最好是awk?)命令,该命令将拉出第二列中的唯一元素,并在其后写入第一列的相应元素的所有元素。因此,对于Example.data,您将获得以下Outcome.data:

Outcome.data:

TRIT1    rs564192510     
MYCL     rs564192510     
NFIA     rs146746778
KIAA1614 rs142596889
XPR1     rs142596889
NOC2L    rs4437820 rs7542092 rs28444699   

我最初尝试使用融合和重塑来在R中执行此操作,但数据框太长而无法轻松处理。

2 个答案:

答案 0 :(得分:1)

也许不是最优雅的,但这应该有用

#! /bin/sh -u

previous=""
while read ln; do
    line=( $ln )
    if [ $line[1] == $previous ]; then
        printf " %s " "${line[0]}"
    else
        printf "\n%-10s %s " "${line[1]}" "${line[0]}"
        previous=$line[1]
    fi
done < /dev/stdin

答案 1 :(得分:1)

要求救援!

 awk -vOFS="\t" '{a[$2]=a[$2]?a[$2] FS $1:$1} END{for(i in a)print i OFS a[i]}'

连接字段索引的数组中的值2.特殊的第一个元素,以消除额外的字段分隔符。