怎么输出行首匹配到特定字符的列
数据有很多列,其格式如下,这是其中几列:我的目的是将列名中匹配到UVM的这一整列打印出来,即这里的$1 $3 $4 $6使用的命令是
awk '{for(i=1;i<=NF;i++)if($i~/UVM/) print $i}' file.txt
但是打印出的只有列名,没有其它的内容
edu_UVMedu_COADedu_UVMedu_UVMedu_ORedu_UVM
0.1198770.10712050.0607520.1570050.5344260.117144
0.90320.81852320.0930140.8563040.9288120.115994
0.8797040.25647880.2536390.9403410.9312140.413085
0.7663160.67432340.7506820.8429870.7668480.584756
0.4099970.55200010.8513270.8473170.7615020.782867
0.8522370.49457280.8413650.86930.8614460.825748
0.1042990.08071760.7114780.7140960.0729170.123553
0.0131790.01524510.0136340.0174730.0155210.013132
0.8408950.79300550.7944930.8551830.8046390.790851
回复 1# elaine2017
awk '{for(i=1;i<=NF;i++){if($i~/UVM/){a=$i}else if(i in a){a=a"->"$i}}}END{for(i in a){print i,a}}' file.txt 回复 2# wh7211
这个不对啊,出来的还是只有匹配到的列名,没有底下的内容 回复 3# 本友会机友会摄友会
这是shell脚本?我文件比较大40多G,这个适用吗 回复 4# elaine2017
这个不对啊,出来的还是只有匹配到的列名,没有底下的内容
cat 1
edu_UVM edu_COAD edu_UVM edu_UVM edu_OR edu_UVM
1 2 3 4 5 6
11 22 33 44 55 66
111 222 333 444 555 666
awk '{for(i=1;i<=NF;i++){if($i~/UVM/){a=$i}else if(i in a){a=a"->"$i}}}END{for(i in a){print i,a}}' 1
1 edu_UVM->1->11->111
3 edu_UVM->3->33->333
4 edu_UVM->4->44->444
6 edu_UVM->6->66->666 回复 6# wh7211
好的,谢谢。不过你这个格式都变了啊 回复 7# elaine2017
cat 1
edu_UVM edu_COAD edu_UVM edu_UVM edu_OR edu_UVM
1 2 3 4 5 6
11 22 33 44 55 66
111 222 333 444 555 666
awk 'NR==1{for(i=1;i<=NF;i++){if($i~/UVM/){a++;b=i}}}{for(i=1;i<=NF;i++){if(a){printf("%s",i<b?$i" ":$i"\n")}}}' 1
edu_UVM edu_UVM edu_UVM edu_UVM
1 3 4 6
11 33 44 66
111 333 444 666 这个你也太纠结了吧,列名只有1行,根据这行就可以获得哪些列需要输出
然后cut 输出对应列就好,不一定要只能用一个工具啊。 回复 9# xdsnet
原数据有7千多列,你要我一个一个去看哪些列需要哪些列不要吗。。。。。。。
页:
[1]
2