使用 awk 重新排列文件中的数据

使用 awk 重新排列文件中的数据

我有一张桌子

 ID   Comment    Statement
  1    hi         hello
  2    hi         hello
  1    cya        bye
  1    k          ok
  2    kk         ok

如何使用 awk 生成如下所示的结果?因此ID成为属性,并且它保持与语句相同的顺序。

 1       2
 hi      hi
 cya     N/A
 k       kk

答案1

这会产生您想要的输出

awk '
  NR>1 {
    ids[$1]
    if (s!=$3) c++
    statements[c]=$3
    s=$3
    comments[$3,$1]=$2
  } 
  END {
    for (id in ids)
      printf "%s\t", id
    print ""
    for (i=1; i<=c; i++) {
      for (id in ids) {
        comment = (comments[statements[i],id] ? comments[statements[i],id] : "n/a")
        printf "%s\t", comment
      }
      print ""
    }
  }
' file

你必须记住一些事情来维持秩序。

答案2

awk 'BEGIN { colwidth=8; format="%-" colwidth "s"; printf format "%s\n","1","2"; };
  NR==1 {next;};
  /^ *1/ { if (NR>2) print col2; col2="N/A"; printf format,$2; };
  /^ *2/ { col2=$2; };
  END { print col2;} ' file
1       2
hi      hi
cya     N/A
k       kk

相关内容