次のテキストファイルがあります。
group0 Level 1
name Matty1
name nickname member4
name Matty2
name nickname member14
group1 Level 1
name sanders1
name nickname member0
name sanders2
name nickname member1
name sanders3
name nickname member2
name sanders4
name nickname member3
group2 Level 2
name Kendal1
name nickname member5
name Kendal2
name nickname member15
group3 Level 2
name colen1
name nickname member6
name colen2
name nickname member7
name colen3
name nickname member8
文章の単語を整理した後、会員ID別にソートしたいです。
member-0 sanders1 group1 1
member-1 sanders2 group1 1
member-2 sanders3 group1 1
member-3 sanders4 group1 1
member-4 Matty1 group0 1
member-5 Kendal1 group2 2
member-6 colen1 group3 2
member-7 colen2 group3 2
member-8 colen3 group3 2
member-14 Matty2 group0 1
member-15 Kendal2 group2 2
答え1
awk '$2=="nickname"{print $3,name,group,digit;next}$1=="name"{name=$2;next}{group=$1;digit=$NF}' file | sed 's/member/member-/g' | sort -n -t- -k 2
member-0 sanders1 group1 1
member-1 sanders2 group1 1
member-2 sanders3 group1 1
member-3 sanders4 group1 1
member-4 Matty1 group0 1
member-5 Kendal1 group2 2
member-6 colen1 group3 2
member-7 colen2 group3 2
member-8 colen3 group3 2
member-14 Matty2 group0 1
member-15 Kendal2 group2 2
答え2
awkを一度だけ呼び出してください。
$ awk -vOFS='\t' '
/^group/{group=$1;level=$3};
$1=="name" && $2!="nickname" {name=$2};
$2=="nickname"{o[++i]=gensub(/member/,"",1,$3)" "name" " group" " level};
END{
asort(o,p,"@val_num_asc");
for(i in p){print "member-"p[i]}
}' file
member-0 sanders1 group1 1
member-1 sanders2 group1 1
member-2 sanders3 group1 1
member-3 sanders4 group1 1
member-4 Matty1 group0 1
member-5 Kendal1 group2 2
member-6 colen1 group3 2
member-7 colen2 group3 2
member-8 colen3 group3 2
member-14 Matty2 group0 1
member-15 Kendal2 group2 2