Входные данные - это файл настроек с несколькими строками, разделенными табуляцией.
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
В 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