免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1919 | 回复: 7
打印 上一主题 下一主题

[文本处理] 行和列的互换 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-02-29 16:45 |只看该作者 |倒序浏览
本帖最后由 gooderpan 于 2016-02-29 16:53 编辑

有一个文件file:(tab分隔)
Chrom    Pos    ref     alt     T1     T2    T3    N1    N2    N3
1           121     A      G      0/1     ./.   1/1    0/0   ./.    0/0
2           1232    C      G    0/1    1/1   1/1    ./.    0/0   0/0
3           161     C      A      1/1     ./.   0/1    0/0   0/0    0/0

想要将该文件的行和列互换,结果如下:(tab分隔)
Chrom    1       2        3
Pos       121   1232    161
ref         A       C        C
alt         G       G        A
T1         0/1    0/1    1/1
T2         ./.     1/1     ./.
T3         1/1    1/1    0/1
N1        0/0     ./.     0/0
N2        ./.      0/0    0/0
N3        0/0    0/0     0/0

请问大神们,该怎么弄呀???谢谢啦!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2016-02-29 17:11 |只看该作者
回复 1# gooderpan

$ awk '{for(n=1;n<=NF;++n)a[n]=a[n]$n" "}END{for(n=1;n<=NF;++n)print a[n]}' FILE | column -t
Chrom  1    2     3
Pos    121  1232  161
ref    A    C     C
alt    G    G     A
T1     0/1  0/1   1/1
T2     ./.  1/1   ./.
T3     1/1  1/1   0/1
N1     0/0  ./.   0/0
N2     ./.  0/0   0/0
N3     0/0  0/0   0/0

   

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
3 [报告]
发表于 2016-02-29 17:16 |只看该作者
  1. awk '{for(i=1;i<=NF;i++)a[i NR]=$i}END{for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++) printf a[i j]"\t";print ""}}' file
复制代码
回复 1# gooderpan


   

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
4 [报告]
发表于 2016-03-01 10:03 |只看该作者
  1. #!/bin/bash

  2. lie=`awk 'END{print NF}' file`

  3. for i in `seq $lie`
  4. do
  5.   awk '{print $"'${i}'"}' file|sed 'N;N;N;s/\n/ /g'
  6. done
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
5 [报告]
发表于 2016-03-01 19:32 |只看该作者
回复 2# jason680
a[n]=a[n]$n" " 这种用法该怎么理解呢


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2016-03-01 19:50 |只看该作者
回复 5# lklkxcxc

a[n]=a[n]$n" "

Line 1:
  Now: a[1] = ""
  $1 = "Chrom"
  a[n]=a[n]$n" " ==>   a[1]=a[1]$1" " ==> a[1] ="" + "Chome" + " "
  after: a[1] = "Chrom "

Line 2:
  Now: a[1] = "Chrom "
  $1 = "1"
  a[n]=a[n]$n" " ==>   a[1]=a[1]$1" " ==> a[1] = "Chome " + "1" + " "
  after: a[1] = "Chrom 1 "

Line 3:
  Now: a[1] = "Chrom 1"
  $1 = "2"
  ...
  after: a[1] = "Chrom 1 2 "

Line4:
    ...
    after: a[1] = "Chrom 1 2 3 "

follow the same way
Line1:  a[2] = "Pos "
Line2:  a[2] = "Pos 121 "
Line3:  a[2] = "Pos 121 1232 "
Line4:  a[2] = "Pos 121 1232 161 "
   

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
7 [报告]
发表于 2016-03-01 20:26 |只看该作者
回复 6# jason680
谢谢你的解答,慢慢了解了,这些用法精髓


   

论坛徽章:
0
8 [报告]
发表于 2016-03-02 15:01 |只看该作者
jason680 发表于 2016-02-29 17:11
回复 1# gooderpan

$ awk '{for(n=1;n

刚在头疼怎么按列grep的问题,看到了你的代码,迎刃而解,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP