输入是一个由制表符分隔的多行设置文件。
h1 h2 h3 x y h4 h5 h6 h7
a b c h4 true
a b c h5 false
a b d h4 false
m n o h6 true
m n o h7 false
p q r h4 true
输出如下。
h1 h2 h3 h4 h5 h6 h7
a b c true false
a b d false
m n o true false
p q r true
我该如何实现这一点?我正在尝试使用 awk 进行一些循环,尽管我知识有限,但我没有主意。
awk -F'\t' '($1!=old1 || $2!=old2 || $3!=old3) && NR>2
{
for (i=1;i<=NF;i++)
print a[i];
}
{
old1=$1;old2=$2;old3=$3;
for (i=1;i<=NF;i++)
{
a[i]= $i;
}
}
END{for (i=1;i<=NF;i++) print a[i];}' $tmpfile1
答案1
您可以在 GNU awk 中使用二维数组执行以下操作:
$ gawk '
BEGIN {
OFS=FS="\t"
}
NR==1 {
print "h1","h2","h3","h4","h5","h6","h7"
next
}
{
a[$1 FS $2 FS $3][$4] = $5
}
END {
PROCINFO["sorted_in"] = "@ind_str_asc"
for (k in a) {
print k, a[k]["h4"],a[k]["h5"], a[k]["h6"], a[k]["h7"]
}
}
' file
h1 h2 h3 h4 h5 h6 h7
a b c true false
a b d false
m n o true false
p q r true