Text-Processing

bash 唯一的行號

  • July 16, 2018

輸入:帶有已排序行的文件

輸出:具有輸入文件中(第一個或任何)唯一行 ID 的文件

例子

輸入

abbylove
abbylove
abbylove
abbylover
abbylover
abbylovesyou
abbylovesyou
abbylsmith
abbylsmith
abbylyn
abbylynn

輸出

1
4
6
8
10
11

0索引也可以。

如何創建這樣的輸出?uniq我在 shell和sort命令中找不到這樣的選項。

更新。

我試圖從它們包含的僅在年份不同的文件中找到唯一的相鄰行。例如,我想過濾文件

abbylove2016
abbylove2017
abbylove2018
abb1999ylover
abb2005ylover
abbyloves2001you
abbyloves2006you
abbylsm1980ith
abbylsm2010ith
abbylyn2002
abbylynn1999

並且只得到

abbylove2016
abb1999ylover
abbyloves2001you
abbylsm1980ith
abbylyn2002
abbylynn1999

我認為刪除年份可能會有所幫助…

至少對於 GNUuniq

$ nl input | uniq --skip-fields=1 | cut -f1
    1
    4
    6
    8
   10
   11

跟踪上一行是什麼,並在目前行不等於上一行時輸出所需資訊:

$ 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

這首先從目前行中刪除所有數字,然後將其結果與前一行(刪除數字)進行比較。如果不匹配,則列印原始的目前行。

引用自:https://unix.stackexchange.com/questions/456602