Command-Line
使用 grep/sort/find 提取唯一值
我有一堆以
YYYYMMDD.Txt
格式命名的文本文件(所以今天是20160420.Txt
)。每個文件基本上都是一個包含時間戳和唯一 ID 的日誌,每個值由製表符分隔。
例如,
20160420.Txt
具有以下值:DATE TIME ID 20160420 0135 123456 20160420 0240 234567 20160420 1252 345678
我需要提取這些文件中存在的所有唯一 ID,但僅限於過去 6 個月的那些文件。
問題是我不能使用 mtime,因為所有文件在過去一周都重新創建了(即:mtime 與文件名不對應)。
有什麼辦法可以用 // 做到這
grep
一點find
?sort
找到 6 個月前的確切日期並非易事,特別是如果目前日期是某個月的 31 日。但是,如果您知道如何使用
find
and執行此操作-mtime
,我會根據文件名稱中的日期來觸摸文件:for x in *.Txt; do dd=${x%.Txt} touch -t "$dd"0000 "$x" done
然後使用
mtime
使用awk來完成這項工作,並使用SQLite來處理日期。
sqlite3 <<< "select date('2016-04-20', '-6 month');" 2015-10-20
丹迪,不是嗎?awk 具有字元串函式來插入/刪除 SQLite 需要的連字元,是的,在製表符分隔符上進行拆分。
awk 'NR == 1 {next}; { IDS[$3]++ }; END {for (K in IDS) {print K}}' ids 123456 345678 234567
也保證快。