Bash循环以搜索所有列

Bash循环以搜索所有列,bash,loops,Bash,Loops,我有一个包含200000行和8k列的大型文件,希望在shell中使用循环或if语句逐个(按列)从每列中提取值“0/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 产出将是: 1 2 0/1 C 1 2

我有一个包含200000行和8k列的大型文件,希望在shell中使用循环或if语句逐个(按列)从每列中提取值“0/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
产出将是:

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

欢迎使用stack overflow,请在代码标记中向我们显示示例输入和预期输出。根据数据的格式,您可以使用
cut
unix工具拉出您感兴趣的任何列。类似
cut-f1,3,4-d',data.csv
的内容将返回第1、3和4列,用逗号分开。嗨,伙计们,谢谢你们的回答。。。。请注意,我有多个值,我只需要过滤“0/1”值,然后将该克隆与其他克隆一起打印。我无法指定第1列到8000列来查找值并进行剪切?然后您需要编写一个程序来遍历文件以确定它需要哪些列,然后实际打印这些列。Thx。我想要这个输入和输出文件的例子。请记住,我有8000列,因此无法指定列名输入:Chr Pos Sample1 Sample2 Sample3 1 568478 0/1 1 1/1 0/1 15 985612 0/0 0 0/1 1 1/1 4 412587 0/1 0/1 0/0 0 0/0 5 218663 0/0 0/1 1 1 1/1 Out Chr Pos Sample1 Sample2 Sample3 1 5684780/1不适用0/1 15 985612不适用0/1不适用4 412587 0/1 0/1不适用5 218663不适用0/1不适用
1       2       0/1     C
1       2       0/1     F
1       2       0/1     J
0       1       0/1     K