私にテーブルがあります。
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