随机select使用linux命令的列

我有一个平面文件(.txt)606,347 ,我想提取50,000 RANDOM列,除了第一列,这是样本标识。 我怎样才能使用Linux命令? 我的文件如下所示:

ID SNP1 SNP2 SNP3 1 0 0 2 2 1 0 2 3 2 0 1 4 1 1 2 5 2 1 0 

它是TAB分隔的。

非常感谢。

干杯,

保拉。

awk来拯救!

 $ cat shuffle.awk function shuffle(a,n,k) { for(i=1;i<=k;i++) { j=int(rand()*(ni))+i if(j in a) a[i]=a[j] else a[i]=j a[j]=i; } } BEGIN{srand(); shuffle(ar,NF,ncols)} {for(i=1;i<=ncols;i++) printf "%s", $(ar[i]) FS; print ""} 

一般用法

 $ echo $(seq 5) | awk -f shuffle.awk -v ncols=5 3 4 1 5 2 

在你的特殊情况下,你可以打印$ 1并从2开始函数循环。

即改变

for(i=1;i<=k;i++) to a[1]=1; for(i=2;i<=k;i++) a[1]=1; for(i=2;i<=k;i++)

尝试这个:

 echo {2..606347} | tr ' ' '\n' | shuf | head -n 50000 | xargs -d '\n' | tr ' ' ',' | xargs -I {} cut -d $'\t' -f {} file 

更新:

 echo {2..606347} | tr ' ' '\n' | shuf | head -n 50000 | sed 's/.*/&p/' | sed -nf - <(tr '\t' '\n' <file) | tr '\n' '\t'