我有一张桌子
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