Text-Formatting

重新組織句子中的文本

  • October 11, 2018

有這樣的文本文件:

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

引用自:https://unix.stackexchange.com/questions/474601