Это предполагает очень надежное появление ',
' и '.
' символов в вашем CSV:
#!/bin/bash
cat "$1" | while IFS='' read -r line; do
D="$(echo "$line" | cut -d ',' -f 1 | tr -d '"')"
P="$(echo "$line" | cut -d '.' -f 2)"
echo 'D: '"$D"
echo 'P: '"$P"
./xyz --project "$P" --displayname "$D"
done
Вы можете сделать что-то вроде:
files=(<->v<->.txt(n))
typeset -A h
for f ($files) h[${f%%v*}]=$f
keep=($h)
echo rm ${files:|keep}
(удалить echo
если доволен)
<->
:любая последовательность цифр(<x-y>
оператор глобуса без указания границы)(n)
:числовая сортировка ${f%%v*}
:стандартное/ksh удаление жадного шаблона с конца. ${files:|keep}
:вычитание массива. Я не слишком хорошо знаком с оболочкой zsh
, и я приду с приведенной ниже комбинацией команд awk
с find
и sort
, которые выполняют сортировку файлов, найденных первыми, с естественными номерами (версий) в тексте
изman sort
.
Затем передать awk
с определением -F'v'
и добавить в массив на основе первой дублированной части имени файла (это гарантирует, что последняя часть сохраняется в массиве), поэтому команда, о которой я говорю, будет выглядеть следующим образом, чтобы получить файлы с большим числом v :
awk -F'v' '{U[$1]=$1"v"$2}END{for(x in U)print U[x]}' <(find . -type f|sort -V)
./012345v3.txt
./3333v7.txt
./11111v11.txt
Теперь у вас есть список файлов, которые вы должны сохранить, а остальные удалить.