删除字母后的所有句点

Removing all periods after a letter

如果我有这样的文件:

stuff stuff.1 stuff.2 stuff.3 12.5 45.2 stugg stugg.1 stugg.2 5.2 8 amber amber.1 amber.2 amber.3 amber.4 7 21.2 amst amst.1 5

我想删除 stuff & stugg &amber &amst 的重复项 以 .number 结尾的所有内容都算作重复 我如何使用 awk 执行此操作?还是 sed?

输出应该是

stuff 12.5 45.2 stugg 5.2 8 amber 7 21.2 amst 5

sed -n '/^[[:blank:]]*[[:alpha:]]/ {/\.[[:digit:]]\+$/! p}' file

对于以字母开头的行,如果该行不以点和数字结尾,则打印该行。


在评论中找到更新的要求:

awk ' !~ /[[:alpha:]]\.[[:digit:]]+$/' file 

啊,那会省略像 "notseen.1" 这样的东西,即使它不是重复的:

awk '
  {root = ; sub(/\.[[:digit:]]+$/, "", root)}
   ~ /[[:alpha:]]\.[[:digit:]]+$/ && seen[root] {next}
  {print; seen[root] = 1}
' file