假設我有很多 csv 檔案位于 /home/user/test
123_24112021_DONG.csv
122_24112021_DONG.csv
145_24112021_DONG.csv
123_24112021_FINA.csv
122_24112021_FINA.csv
145_24112021_FINA.csv
123_24112021_INDEM.csv
122_24112021_INDEM.csv
145_24112021_INDEM.csv
如您所見,所有檔案都有三個唯一的前綴:
145
123
122
而且,我需要為每個前綴創建 zip,其中將包含 csv 檔案。請注意,實際上,我不知道 csv 檔案的數量,這只是一個示例(每個前綴 3 個 csv 檔案)。我開發了一個代碼,從 bash 表中的所有 csv 名稱中提取前綴:
for entry in "$search_dir"/*
do
# extract csv files
f1=${entry##*/}
echo $f1
# extract prefix of each file
f2=${f1%%_*}
echo $f2
# add prefix in table
liste_sirets =($f2)
done
# get uniq prefix in unique_sorted_list
unique_sorted_list=($(printf "%s\n" "${liste_sirets[@]}" | sort -u ))
echo $unique_sorted_list
這給出了結果:
145
123
122
現在我想在同一個 zip 檔案中壓縮由它們的前綴定義的每三個檔案:換句話說,創建123_24112021_M2.zip將包含
123_24112021_DONG.csv
123_24112021_FINA.csv
123_24112021_INDEM.csv
和122_24112021_M2.zip 145_24112021_M2.zip...
因此,我開發了一個回圈,它將關注位于本地路徑中的 csv 檔案的每個前綴名稱,然后壓縮所有具有相同前綴名稱的檔案:
for i in $unique_sorted_list
do
for j in "$search_dir"/*
do
if $(echo $j| cut -d'_' -f1)==$i
zip -jr $j
done
但是,它不起作用,請提供任何幫助!謝謝你 !
uj5u.com熱心網友回復:
使用 bash 和 shell 實用程式:
#!/bin/bash
printf '%s\n' *_*.csv | cut -d_ -f1 | uniq |
while read -r prefix
do
zip "$prefix".zip "$prefix"_*.csv
done
uj5u.com熱心網友回復:
使用bash 4 關聯陣列:
# declare an associative array
declare -A unq
# store unique prefixes in array unq
for f in *_*.csv; do
unq["${f%%_*}"]=1
done
# iterate through unq and create zip files
for i in "${!unq[@]}"; do
zip "$i" "${i}_"*
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365308.html
