Bash从文件中删除重复字(regex:sed,awk)

Bash从文件中删除重复字(regex:sed,awk),regex,bash,sed,Regex,Bash,Sed,我读过其他与我非常相似的问题。然而,当我尝试建议的代码时,它不起作用 所以我有一个包含以下内容的文件 comp232:数学。计算机科学:3学分 summer:选择AA:-T-J---(10:45-13:15):SGW H-521:KRATOCHVIL,瓦茨拉夫 图坦卡蒙:-T-J---(13:45-15:25):SGW H-521 秋季:选择Q:-T-J---(13:15-14:30):SGW H-820:格拉尼,戈斯塔 图坦卡蒙:-T-----(16:15-17:55):SGW H-607 图

我读过其他与我非常相似的问题。然而,当我尝试建议的代码时,它不起作用

所以我有一个包含以下内容的文件

comp232:数学。计算机科学:3学分
summer:选择AA:-T-J---(10:45-13:15):SGW H-521:KRATOCHVIL,瓦茨拉夫
图坦卡蒙:-T-J---(13:45-15:25):SGW H-521
秋季:选择Q:-T-J---(13:15-14:30):SGW H-820:格拉尼,戈斯塔
图坦卡蒙:-T-----(16:15-17:55):SGW H-607
图坦卡蒙:---(14:45-16:25):SGW H-619
秋季:选择R:-T-J---(13:15-14:30):SGW H-937:NARAYANAN,拉塔
图拉:-T-----(16:15-17:55):SGW H-1070
Tut RB:-T-----(16:15-17:55):SGW GN-M100
秋天:选择DD:--W---(17:45-20:15):SGW FG-C070:DOEDEL,尤西比乌斯
图达:--W--(20:30-22:10):SGW H-429
图坦卡蒙:W--(20:30-22:10):SGW H-619
温特:选择S:-T-J---(13:15-14:30):SGW H-561:BERGLER,萨宾
图坦萨:-T-----(14:45-16:25):SGW H-920
温特:选择NN:--J---(17:45-20:15):SGW H-520:格拉尼,戈斯塔
图纳:---J---(20:30-22:10):SGW H-520
Tut NB:-T-----(20:30-22:10):SGW H-607

我希望我的输出是这样的

comp232:数学。计算机科学:3学分
summer:选择AA:-T-J---(10:45-13:15):SGW H-521:KRATOCHVIL,瓦茨拉夫
图坦卡蒙:-T-J---(13:45-15:25):SGW H-521
秋季:选择Q:-T-J---(13:15-14:30):SGW H-820:格拉尼,戈斯塔
图坦卡蒙:-T-----(16:15-17:55):SGW H-607
图坦卡蒙:---(14:45-16:25):SGW H-619
选台R:-T-J---(13:15-14:30):SGW H-937:拉塔纳拉亚南
图拉:-T-----(16:15-17:55):SGW H-1070
Tut RB:-T-----(16:15-17:55):SGW GN-M100
选择DD:--W---(17:45-20:15):SGW FG-C070:DOEDEL,EUSEBIUS
图达:--W--(20:30-22:10):SGW H-429
图坦卡蒙:W--(20:30-22:10):SGW H-619
温特:选择S:-T-J---(13:15-14:30):SGW H-561:BERGLER,萨宾
图坦萨:-T-----(14:45-16:25):SGW H-920
选择NN:--J---(17:45-20:15):SGW H-520:格拉尼,戈斯塔
图纳:---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
GNU awk 4.1

#!/usr/bin/awk -f
@include "join"
{
  split($0, foo, ":")
  if (seen[foo[1]]++)
    $0 = "   " join(foo, 2, length(foo), ":")
}
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
prev=“dummy”
读行时
做
标记=$(echo$行| grep-Eo“^[a-zA-Z]+:”)
如果[“$tag”==“$prev”]
然后
回显“${line#$tag}”
其他的
如果[“$tag”!=”]
然后
prev=“$tag”
其他的
回声-n“”
fi
回音“$line”
fi
完成
我把它放在我的
测试中。sh
bash代码,但是最后一个结束括号
}
突出显示为红色。我把我的文件名也放进去了,而不是
foo