次のようなデータ形式があります。
Ind1 0 1 2
Ind1 0 2 1
Ind2 1 1 0
Ind2 2 2 0
この出力を得るためにAWKを使用したい:
Ind1 00 12 21
Ind2 12 12 00
つまり、同じ行名を持つ 2 つの行をそれぞれマージします。
よろしくお願いいたします。
次のようなデータ形式があります。
Ind1 0 1 2
Ind1 0 2 1
Ind2 1 1 0
Ind2 2 2 0
この出力を得るためにAWKを使用したい:
Ind1 00 12 21
Ind2 12 12 00
つまり、同じ行名を持つ 2 つの行をそれぞれマージします。
よろしくお願いいたします。
ファイル a.awk:
{
col2[$1] = col2[$1] $2
col3[$1] = col3[$1] $3
col4[$1] = col4[$1] $4
}
END {
for ( i in col2 )
{
print i " " col2[i] " " col3[i] " " col4[i]
}
}
走る:
cat data | awk -f a.awk
このバージョンは、グループ化する必要があるすべての行が連続していることのみを前提としています
awk '
function output() {
printf "%s", prev
for (i=2; i<=NF; i++)
printf "%s%s", OFS, col[i]
print ""
}
$1 != prev {
if (NR != 1)
output()
for (i=2; i<=NF; i++)
col[i] = $i
prev = $1
next
}
{
for (i=2; i<=NF; i++)
col[i] = col[i] $i
}
END {
output()
}
'