2017-07-16 61 views
1

作爲**grep -e "Full Name" -e "Address" -e "Celphone"|awk '{$1=$1;print}'**的結果(在bash文件),我有以下幾點:格式多行文本文件

Full Name: Person A<p> 
Address: Address A<p> 
Celphone: Celphone A<p> 
Full Name: Person B<p> 
Address: Address B<p> 
Full Name: Person C<p> 
Address: Address C<p> 
Full Name: Person D<p> 
Address: Address D<p> 
Celphone: Celphone D<p> 

不過,我想有一個最終的輸出類似如下:

Full Name: Person A , Address: Address A, Celphone: Celphone A<p> 
Full Name: Person B , Address: Address B<p> 
Full Name: Person C , Address: Address C<p> 
Full Name: Person D , Address: Address D, Celphone: Celphone D<p> 

我的挑戰是行Celphone並不總是存在於文件中,我不知道如何有這種「條件連接」。

有人知道該怎麼做嗎?

在此先感謝。

+2

發佈初始文件內容 – RomanPerekhrest

回答

0
sed -n '/^Full/{x;s/\n/, /g;1!p;d;};H;${g;s/\n/, /g;p;}' filename 
1

你可以通過awk命令來完成。

awk -F':' '{if(NR==1){printf("%s",$0)}else if($1~"Full Name"){printf("\n%s",$0)} else{printf(",%s",$0)}}' file 

它將返回:

Full Name: Person A<p>,Address: Address A<p>,Celphone: Celphone A<p> 
Full Name: Person B<p>,Address: Address B<p> 
Full Name: Person C<p>,Address: Address C<p> 
Full Name: Person D<p>,Address: Address D<p>,Celphone: Celphone D<p> 

但我在輸出中注意到,有一個在線路之間沒有<p>。如果你真的想這樣,那麼你可以試試下面的命令:

awk -F':' '{if(NR==1){printf("%s",$0)}else if($1~"Full Name"){printf("\n%s",$0)} else{printf(" , %s",$0)}}' test.txt | sed 's/<p> ,/ ,/g' 

它將返回:

Full Name: Person A , Address: Address A , Celphone: Celphone A<p> 
Full Name: Person B , Address: Address B<p> 
Full Name: Person C , Address: Address C<p> 
Full Name: Person D , Address: Address D , Celphone: Celphone D<p> 
1

這可能會爲你工作(GNU SED):

sed ':a;N;/\nFull Name:/!s/<p>\n/, /;ta;P;D' file 

收集起來完整記錄的行數,將<p>和以下換行符替換爲,。然後打印新記錄並重復。