我在文本文件中有以下格式的数据。
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,但我无法继续。
问候。
答案 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