linux - 使用linux命令随机选择列

标签 linux bash shell unix

我有一个包含 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/

相关文章:

linux - 什么是 dbus 守护进程以及为什么 vlc 需要它

python - 使用 python subprocess.call 将 fasta 序列的计数写入文件

bash - ansible:远程机器上的文件是否有类似 with_fileglobs 的东西?

linux - 使用 npm 安装后找不到命令

string - 如何使用 sed 在 bash 脚本中追加字符串?

bash - 如何从 Unix shell 脚本中的字符串中删除一个字符?

linux - 如何制定自由策略?

shell - 第一种具有交互式 shell 的编程语言?

bash - 格式化 shell 脚本

linux - 在 Linux 中共享可执行内存页?