Text-Formatting
重新組織句子中的文本
有這樣的文本文件:
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
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
只呼叫一次 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