加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

使用gawk转置列和行

发布时间:2020-12-14 01:35:09 所属栏目:Linux 来源:网络整理
导读:我试图转置一个非常长的文件,我担心它不会完全转置. 我的数据看起来像这样: Thisisalongstring12345678 1 AB abc 937 4.320194Thisisalongstring12345678 1 AB efg 549 0.767828Thisisalongstring12345678 1 AB hi 346 -4.903441Thisisalongstring12345678
我试图转置一个非常长的文件,我担心它不会完全转置.

我的数据看起来像这样:

Thisisalongstring12345678   1   AB  abc 937 4.320194
Thisisalongstring12345678   1   AB  efg 549 0.767828
Thisisalongstring12345678   1   AB  hi  346 -4.903441
Thisisalongstring12345678   1   AB  jk  193 7.317946

我希望我的数据看起来像这样:

Thisisalongstring12345678 Thisisalongstring12345678 Thisisalongstring12345678 Thisisalongstring12345678
1                         1                         1                         1
AB                        AB                        AB                        AB
abc                       efg                       hi                        jk
937                       549                       346                       193
4.320194                  0.767828                  -4.903441                 7.317946

第一根弦的长度是否会成为问题?我的文件比这长约2000行长得多.也可以将第一个字符串的名称更改为Thisis234,然后转置?

解决方法

我不明白为什么它不会 – 除非你没有足够的记忆.尝试以下内容,看看是否遇到问题.

输入:

$cat inf.txt 
a b c d
1 2 3 4
.,+ -
A B C D

Awk计划:

$cat mkt.sh
awk '
{
  for(c = 1; c <= NF; c++) {
    a[c,NR] = $c
  }
  if(max_nf < NF) {
    max_nf = NF
  }
}
END {
  for(r = 1; r <= NR; r++) {
    for(c = 1; c <= max_nf; c++) {
      printf("%s ",a[r,c])
    }
    print ""
  }
}
' inf.txt

跑:

$./mkt.sh 
a 1 . A 
b 2,B 
c 3 + C 
d 4 - D

积分:

> http://www.chemie.fu-berlin.de/chemnet/use/info/gawk/gawk_12.html#SEC121

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读