Text-Processing
bash 唯一的行號
輸入:帶有已排序行的文件
輸出:具有輸入文件中(第一個或任何)唯一行 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
我認為刪除年份可能會有所幫助…
至少對於 GNU
uniq
$ 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
這首先從目前行中刪除所有數字,然後將其結果與前一行(刪除數字)進行比較。如果不匹配,則列印原始的目前行。