删除字母后的所有句点

时间:2015-01-21 19:45:40

标签: awk sed

如果我有这样的文件:

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

1 个答案:

答案 0 :(得分:3)

<击>

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

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


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

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

啊,这会省略类似“notseen.1”的内容,即使它不是重复内容:

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