Awk 查找第1列中的所有元素,其中第2列为x
我有一个2x14000000数据帧,其中第1列是一系列(基本上)唯一的元素,第2列是重复的 示例.数据:Awk 查找第1列中的所有元素,其中第2列为x,awk,Awk,我有一个2x14000000数据帧,其中第1列是一系列(基本上)唯一的元素,第2列是重复的 示例.数据: rs564192510 TRIT1 rs564192510 MYCL rs146746778 NFIA rs142596889 KIAA1614 rs142596889 XPR1 rs4437820 NOC2L rs7542092 NOC2L rs28444699 NOC2L 我正在寻找一个(最好是awk?)命令,它
rs564192510 TRIT1
rs564192510 MYCL
rs146746778 NFIA
rs142596889 KIAA1614
rs142596889 XPR1
rs4437820 NOC2L
rs7542092 NOC2L
rs28444699 NOC2L
我正在寻找一个(最好是awk?)命令,它将拉出第二列中的唯一元素,并在第二列之后写入第一列中相应元素的所有元素。因此,例如.data,您将得到下面的output.data:
结果.数据:
TRIT1 rs564192510
MYCL rs564192510
NFIA rs146746778
KIAA1614 rs142596889
XPR1 rs142596889
NOC2L rs4437820 rs7542092 rs28444699
我最初尝试在R中使用melt和Reforme来实现这一点,但数据帧太长,无法轻松处理。也许不是最优雅的,但这应该可以实现
#! /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
#/bin/sh-u
上一个=“”
读ln时;做
行=($ln)
如果[$line[1]==$previous];然后
printf“%s”${line[0]}
其他的
printf“\n%-10s%s”“${line[1]}”“${line[0]}”
上一行=$line[1]
fi
完成
awk救命
awk -vOFS="\t" '{a[$2]=a[$2]?a[$2] FS $1:$1} END{for(i in a)print i OFS a[i]}'
连接由字段2索引的数组中的值。用于第一个元素的特殊字符,以消除额外的字段分隔符。
perl-ane'if($F[1]ne$p){print“\n$F[1]”;$p=$F[1]}print“$F[0]”;结束{print“\n”}
这项工作既快又好。请写一个答案,这样我可以信任你!所以你只想找人帮你写代码?这就是你被否决的原因。stackoverflow不是“为我编写代码”服务。让我们来看看。