我有一个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中执行此操作,但数据框太长而无法轻松处理。
答案 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.特殊的第一个元素,以消除额外的字段分隔符。