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
?