我正在嘗試從/rec/flux_entrant/archive/le501/tble91_formation_eligible/*目錄中提取特定部分。該目錄位于,HDFS因此我們可以使用以下命令公開其包含
hdfs dfs -ls /rec/flux_entrant/archive/le501/tble91_formation_eligible/*
:
/rec/flux_entrant/archive/le501/tble91_formation_eligible/20220104-221755/00000.deflate
/rec/flux_entrant/archive/le501/tble91_formation_eligible/20220103-231754/00001.deflate
/rec/flux_entrant/archive/le501/tble91_formation_eligible/20220111-152145/00002.deflate
/rec/flux_entrant/archive/le501/tble91_formation_eligible/20220112-155012/00003.deflate
我的目標是僅提取由(不是 xxx.deflate 檔案)
給出的這些路徑的最后一部分: 20220104-221755,,然后
按具有 date => 的那些路徑進行過濾20220103-231754,因此,最終結果應該是 :
并且因為and are => to 2022011020220111-15214520220112-1550122022011020220111-15214520220112-1550122022011120220112
我嘗試使用awk命令使用命令:
hdfs dfs -ls /rec/flux_entrant/archive/le501/tble91_formation_eligible/* | awk -F'/' '{split($NF, a, "-"); if (a[1]>20220110) print $NF}'
但是這個回報:00003.deflateand 00002.deflate and not 20220111-152145 and20220112-155012
編輯
正如@Tom 所建議的,我使用print $(NF-1)了代替$NF,但過濾器不好。我還嘗試在串列變數中獲取結果:
OUTPUT=$(hdfs dfs -ls /rec/flux_entrant/archive/le501/tble91_formation_eligible/* |
awk -F'/' '{split($NF, a, "-"); if (a[1]>=20220110) print $(NF-1)}')
echo ${OUTPUT}
給
Found 5 items 20200916-170926 20200916-170926 20200916-170926 20200916-170926 20200916-170926 Found 5 items 20200916-182251
不好,因為20200916,20200916...不是=> 20220110
我還需要Found 5 items從最終結果中洗掉
請問有什么幫助嗎?謝謝
uj5u.com熱心網友回復:
試試這個,使用FPATAWK 的變數:
hdfs dfs -ls /rec/flux_entrant/archive/le501/tble91_formation_eligible/* |
awk -v startdate="20220110" 'BEGIN{FPAT="[0-9]{8}-[0-9]{6}"}($1 >= startdate){print $1}'
我使用該變數startdate來避免將字串硬編碼20220110到 AWK 代碼中。
解釋:FPAT是一個正則運算式,描述了 AWK 必須考慮的欄位:在我們的例子中,是一個 8 位數字的序列,后跟一個連字符和 6 個數字。在. print $1_($1 >= startdate)
uj5u.com熱心網友回復:
據我了解,你實際上想要這樣的事情開始:
$ hdfs dfs ls -d /path/to/dir/*/
這將選擇所有子目錄,/path/to/dir而不是由于標志而遍歷它們-d(參見hadoop 檔案。從那時起,選擇目錄很簡單。目錄的形式是按YYYYMMDD-hhmmss字典順序排序的。所以你可以做類似的事情這:
$ hdfs dfs ls -d /path/to/dir/*/ | awk -F/ '($NF<"20220128"){print $NF}'
請注意,我們在 中進行字串比較而不是數字比較$NF<"20220128"。由于 awk 的內部結構,您可以進行數字比較,并且 awk 將在其轉換中去除字串的所有非數字部分。所以你可以這樣做:
$ hdfs dfs ls -d /path/to/dir/*/ | awk -F/ '($NF 0<20220128){print $NF}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/422219.html
標籤:
