如果:存在shell脚本,则将行合并在一起

时间:2017-12-05 04:38:06

标签: shell awk sed

我在文本文件中有以下格式的数据。

desc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana
gement
ldesc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man
agement (BCD-WQ-UIO, BCD-WQ-BN)
date                          :

我试图以下面的格式获得输出。

desc                          : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Management
ldesc                          : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Management (BCD-WQ-UIO, BCD-WQ-BN)

基本上我想要任何有冒号的行但是冒号后面什么都不应该被删除,如果任何行没有冒号,它应该与前一行合并,包括空格(如果有的话)。

我尝试使用awk,但我无法继续。

问候。

2 个答案:

答案 0 :(得分:0)

假设您的文件名为exp1.txt

awk -F: 'length($2) { print $0 }' exp1.txt

你会得到你期望的结果!

我的输出:

(public)landpacks-MacBook-Pro:stackoverflow frank$ cat exp1.txt 
desc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana
gement
ldesc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man
agement (BCD-WQ-UIO, BCD-WQ-BN)
date                          :
(public)landpacks-MacBook-Pro:stackoverflow frank$ awk -F: 'length($2) { print $0 }' exp1.txt 
desc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana
ldesc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man
(public)landpacks-MacBook-Pro:stackoverflow frank$ 

答案 1 :(得分:0)

要将线与前一行合并,必须避免在知道是否合并之前打印换行符。到达文件末尾时不要忘记打印最终换行符!

awk '/:./ { printf "%s", $0; pending=1; next }
     /:$/ { if (pending) printf "\n"; pending=0; next }
     pending { printf "%s\n", $0; pending=0 }
     END { if (pending) printf "\n" }' file