我读过其他与我非常相似的问题。但是,当我尝试使用建议的代码时,它无法正常工作
所以我有一个包含以下内容的文件
COMP 232:MATH. FOR COMPUTER SCIENCE:3 credits
summer:Lect AA:-T-J--- (10:45-13:15):SGW H-521:KRATOCHVIL, VACLAV
Tut AE:-T-J--- (13:45-15:25):SGW H-521
fall:Lect Q:-T-J--- (13:15-14:30):SGW H-820:GRAHNE, GOSTA
Tut QA:-T----- (16:15-17:55):SGW H-607
Tut QB:---J--- (14:45-16:25):SGW H-619
fall:Lect R:-T-J--- (13:15-14:30):SGW H-937:NARAYANAN, LATA
Tut RA:-T----- (16:15-17:55):SGW H-1070
Tut RB:-T----- (16:15-17:55):SGW GN-M100
fall:Lect DD:--W---- (17:45-20:15):SGW FG-C070:DOEDEL, EUSEBIUS
Tut DA:--W---- (20:30-22:10):SGW H-429
Tut DB:--W---- (20:30-22:10):SGW H-619
winter:Lect S:-T-J--- (13:15-14:30):SGW H-561:BERGLER, SABINE
Tut SA:-T----- (14:45-16:25):SGW H-920
winter:Lect NN:---J--- (17:45-20:15):SGW H-520:GRAHNE, GOSTA
Tut NA:---J--- (20:30-22:10):SGW H-520
Tut NB:-T----- (20:30-22:10):SGW H-607
我希望我的输出是这个
COMP 232:MATH. FOR COMPUTER SCIENCE:3 credits
summer:Lect AA:-T-J--- (10:45-13:15):SGW H-521:KRATOCHVIL, VACLAV
Tut AE:-T-J--- (13:45-15:25):SGW H-521
fall:Lect Q:-T-J--- (13:15-14:30):SGW H-820:GRAHNE, GOSTA
Tut QA:-T----- (16:15-17:55):SGW H-607
Tut QB:---J--- (14:45-16:25):SGW H-619
Lect R:-T-J--- (13:15-14:30):SGW H-937:NARAYANAN, LATA
Tut RA:-T----- (16:15-17:55):SGW H-1070
Tut RB:-T----- (16:15-17:55):SGW GN-M100
Lect DD:--W---- (17:45-20:15):SGW FG-C070:DOEDEL, EUSEBIUS
Tut DA:--W---- (20:30-22:10):SGW H-429
Tut DB:--W---- (20:30-22:10):SGW H-619
winter:Lect S:-T-J--- (13:15-14:30):SGW H-561:BERGLER, SABINE
Tut SA:-T----- (14:45-16:25):SGW H-920
Lect NN:---J--- (17:45-20:15):SGW H-520:GRAHNE, GOSTA
Tut NA:---J--- (20:30-22:10):SGW H-520
Tut NB:-T----- (20:30-22:10):SGW H-607
我已尝试过以下代码,但没有一个产生我想要的输出
sed -e 's/\b\([a-z]\+\)[ ,\n]\1/\1/g' temp.txt
sort -u temp.txt
答案 0 :(得分:1)
GNU awk 4.1
#!/usr/bin/awk -f
@include "join"
{
split($0, foo, ":")
if (seen[foo[1]]++)
$0 = " " join(foo, 2, length(foo), ":")
}
1
答案 1 :(得分:1)
看起来很冗长,但工作正常:
prev="dummy"
while read line
do
tag=$(echo $line | grep -Eo "^[a-zA-Z]+:")
if [ "$tag" == "$prev" ]
then
echo " ${line#$tag}"
else
if [ "$tag" != "" ]
then
prev="$tag"
else
echo -n " "
fi
echo "$line"
fi
done < /path/to/file