【问题标题】:Bash loops to search for all columnsBash 循环搜索所有列
【发布时间】:2017-10-22 08:12:41
【问题描述】:

我有一个包含 200,000 行和 8k 列的巨大文件,并希望在 shell 中循环或 if 语句以从每一列(按列)一一提取值“0/1”并打印该列以及前两列带有标题的列。

【问题讨论】:

  • 欢迎来到堆栈溢出,请在代码标签中向我们展示示例输入和预期输出。
  • 根据您的数据格式,您可以使用cut unix 工具提取您感兴趣的任何列。
  • cut -f1,3,4 -d',' data.csv 之类的东西会返回第 1、3 和 4 列,以逗号分隔。
  • 大家好,感谢您的回答....请注意,我有多个值,我只需要过滤“0/1”值,而不是与其他值一起打印该 cloumn。我无法将第 1 列指定为 8000 以查找值并剪切?
  • 然后你需要编写一个程序来检查你的文件以确定它需要哪些列,然后实际打印出来。

标签: bash loops


【解决方案1】:

awk:

awk 'NR==1{split($0,arr,/ /)};
     NR>1{for (i=3;i<=NF;i++) if($i=="0/1") print $1, $2, $i, arr[i]}' OFS="\t" infile

对于以下示例输入数据:

A B C D E F G H I J K
1 2 0/1 4 5 0/1 7 8 9 0/1 10
0 1 2 3 4 5 6 7 8 9 0/1

输出将是:

1       2       0/1     C
1       2       0/1     F
1       2       0/1     J
0       1       0/1     K

【讨论】:

  • 谢谢。我想要这个示例用于输入和输出文件。记住我有 8000 列,所以我不能指定列名输入:Chr Pos Sample1 Sample2 Sample3 1 568478 0/1 1/1 0/1 15 985612 0/0 0/1 1/1 4 412587 0/1 0/1 0/ 0 5 218663 0/0 0/1 1/1 输出 Chr Pos Sample1 Sample2 Sample3 1 568478 0/1 N/A 0/1 15 985612 N/A 0/1 N/A 4 412587 0/1 0/1 N /A 5 218663 不适用 0/1 不适用
猜你喜欢
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多