elaine2017 发表于 2018-12-04 15:33

怎么输出行首匹配到特定字符的列

数据有很多列,其格式如下,这是其中几列:

我的目的是将列名中匹配到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

wh7211 发表于 2018-12-04 17:55

回复 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

本友会机友会摄友会 发表于 2018-12-04 22:26

elaine2017 发表于 2018-12-05 09:59

回复 2# wh7211

这个不对啊,出来的还是只有匹配到的列名,没有底下的内容

elaine2017 发表于 2018-12-05 10:33

回复 3# 本友会机友会摄友会

这是shell脚本?我文件比较大40多G,这个适用吗

wh7211 发表于 2018-12-05 14:03

回复 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

elaine2017 发表于 2018-12-05 15:39

回复 6# wh7211

好的,谢谢。不过你这个格式都变了啊

wh7211 发表于 2018-12-05 18:20

回复 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

xdsnet 发表于 2018-12-06 12:27

这个你也太纠结了吧,列名只有1行,根据这行就可以获得哪些列需要输出
然后cut 输出对应列就好,不一定要只能用一个工具啊。

elaine2017 发表于 2018-12-10 09:31

回复 9# xdsnet

原数据有7千多列,你要我一个一个去看哪些列需要哪些列不要吗。。。。。。。
页: [1] 2
查看完整版本: 怎么输出行首匹配到特定字符的列