输入:具有排序行的文件
输出:具有输入文件中的(第一个或任何)唯一行 ID 的文件
例子
输入
abbylove
abbylove
abbylove
abbylover
abbylover
abbylovesyou
abbylovesyou
abbylsmith
abbylsmith
abbylyn
abbylynn
输出
1
4
6
8
10
11
0 索引也可以。
如何创建这样的输出?我在 shelluniq
和sort
命令中没有找到这样的选项。
更新。
我试图从它们包含的仅年份不同的文件中找到唯一的相邻行。例如,我想过滤文件
abbylove2016
abbylove2017
abbylove2018
abb1999ylover
abb2005ylover
abbyloves2001you
abbyloves2006you
abbylsm1980ith
abbylsm2010ith
abbylyn2002
abbylynn1999
并只得到
abbylove2016
abb1999ylover
abbyloves2001you
abbylsm1980ith
abbylyn2002
abbylynn1999
我认为消除岁月可能会有所帮助......
答案1
至少对于GNUuniq
$ nl input | uniq --skip-fields=1 | cut -f1
1
4
6
8
10
11
答案2
跟踪上一行是什么,并在当前行不等于前一行时输出所需的信息:
$ awk '$0 != prev { print NR, $0; prev = $0 }' file
1 abbylove
4 abbylover
6 abbylovesyou
8 abbylsmith
10 abbylyn
11 abbylynn
或者
$ awk '$0 != prev { print NR; prev = $0 }' file
1
4
6
8
10
11
对于更新的问题:
$ awk '{ curr=$0; gsub("[0-9]","",curr) } curr != prev { print; prev = curr }' file
abbylove2016
abb1999ylover
abbyloves2001you
abbylsm1980ith
abbylyn2002
abbylynn1999
其工作原理是首先删除当前行中的所有数字,然后将结果与上一行(删除数字后)进行比较。如果不匹配,则打印原始当前行。