給定 array1 我想找到每個 csv 條目的每個唯一的第一次出現。該陣列已按日期排序。所以第一次出現將是最近的一次。
array1=(s3://root/sub1/sub2/2022-10-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-09-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-08-22/ a.csv/ b.csv/ c.csv/ d.csv/ s3://root/sub1/sub2/2022-07-22/ a.csv/)
我想回傳一個陣列,其中包含每個 csv 條目的每個唯一的、最近出現的
array2=(s3://root/sub1/sub2/2022-10-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-08-22/ c.csv/ d.csv/)
所有重復條目的陣列
array3=(s3://root/sub1/sub2/2022-09-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-08-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-07-22/ a.csv/)
我的思考程序如下 - 遍歷陣列,如果元素是 s3 路徑檢查前面的元素并將 s3 路徑和 csv 檔案寫入新陣列。當前面的元素是另一個 s3 路徑時停止。如果以下 s3 路徑包含相同的 csv 檔案,則寫入重復陣列。如果以下 s3 路徑包含新的 csv 檔案,則追加到新陣列。
uj5u.com熱心網友回復:
請您嘗試以下方法:
#!/bin/bash
declare -A seen # check if the csv element has appeared
array1=(s3://root/sub1/sub2/2022-10-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-09-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-08-22/ a.csv/ b.csv/ c.csv/ d.csv/ s3://root/sub1/sub2/2022-07-22/ a.csv/)
array2=(); array3=()
while read -r first others; do # split the line into "s3:.." and others
read -r -a ary <<< "$others" # split others into list of csv's
dup=(); new=() # temporary arrays
for i in "${ary[@]}"; do # loop over the csv's
(( seen[$i] )) && dup =( "$i" ) || new =( "$i" ) # sort the csv's depending on the history
done
(( ${#new[@]} )) && array2 =( "$first" "${new[@]}" ) # if array "new" is non-empty, append to array2
(( ${#dup[@]} )) && array3 =( "$first" "${dup[@]}" ) # if array "dup" is non-empty, append to array3
done < <(sed -E 's# (s3://)#'\\$'\n''\1#g' <<< "${array1[*]}") # construct 2-d structure from array1
echo "${array2[@]}"
echo "${array3[@]}"
輸出:
s3://root/sub1/sub2/2022-10-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-08-22/ c.csv/ d.csv/
s3://root/sub1/sub2/2022-09-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-08-22/ a.csv/ b.csv/ s3://root/sub1/sub2/2022-07-22/ a.csv/
看起來像array1具有二維結構,我首先將元素重新排列sed為:
s3://root/sub1/sub2/2022-10-22/ a.csv/ b.csv/
s3://root/sub1/sub2/2022-09-22/ a.csv/ b.csv/
s3://root/sub1/sub2/2022-08-22/ a.csv/ b.csv/ c.csv/ d.csv/
s3://root/sub1/sub2/2022-07-22/ a.csv/
然后逐行處理它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529236.html
標籤:重击壳脚本
