我有一个包含 606,347 个列 的平面文件 (.txt),我想提取 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()*(n-i))+i
if(j in a) a[i]=a[j]
else a[i]=j
a[j]=i;
}
}
BEGIN {srand()}
NR==1 {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++)
至 a[1]=1; for(i=2;i<=k;i++)
关于linux - 使用linux命令随机选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36187942/