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

関連情報