Command-Line

使用 grep/sort/find 提取唯一值

  • April 22, 2016

我有一堆以YYYYMMDD.Txt格式命名的文本文件(所以今天是20160420.Txt)。

每個文件基本上都是一個包含時間戳和唯一 ID 的日誌,每個值由製表符分隔。

例如,20160420.Txt具有以下值:

DATE        TIME   ID
20160420   0135   123456
20160420   0240   234567
20160420   1252   345678

我需要提取這些文件中存在的所有唯一 ID,但僅限於過去 6 個月的那些文件。

問題是我不能使用 mtime,因為所有文件在過去一周都重新創建了(即:mtime 與文件名不對應)。

有什麼辦法可以用 // 做到這grep一點findsort

找到 6 個月前的確切日期並非易事,特別是如果目前日期是某個月的 31 日。但是,如果您知道如何使用findand執行此操作-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

也保證快。

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