Tenho um pipeline usando array jobs e preciso alterar o número de entradas para algumas etapas. Pensei em testar, uniq
já que a única parte que muda nas minhas pastas são os últimos quatro caracteres (a parte hap no exemplo). Então, todos os meus caminhos parecem algo como:
/mnt/nvme/user/something1/hap1
/mnt/nvme/user/something1/hap2
/mnt/nvme/user/something2/hap1
/mnt/nvme/user/something2/hap2
e o que estou fazendo é o seguinte:
DIR=( "/mnt/nvme/ungaro/something1/hap1" "/mnt/nvme/ungaro/something1/hap2" "/mnt/nvme/ungaro/something2/hap1" "/mnt/nvme/ungaro/something2/hap2" )
for dir in "${DIR[@]}"; do echo $dir | sed 's#/hap[0-9]##' | uniq; done
Mas a saÃda resultante sempre exibe todos os elementos na variável sem recolher as linhas duplicadas após remover a parte hap de cada uma delas.
Provavelmente estou esquecendo de algo, poderia ser que as for
forças imprimam todas as linhas de qualquer maneira. Se sim, há uma maneira de atingir o resultado desejado em um comando de linha única?
Com o pipe para
uniq
dentro do loop do shell, cada linha é avaliada separadamente (e cada uma é obviamente única por si só). Você pode usarou (reduzindo múltiplas invocações sed para uma)
ou (eliminando o loop explÃcito)
ou (usando um modificador de expansão variável no lugar de
sed
um comando externo) 11. No zsh você pode ir um passo além e imprimir os cabeçalhos exclusivos diretamente:
print -r -C1 ${(u)DIR:h}
O que eu faria:
ou
$NF
é a última coluna separada por/
aquela que você tenta remover comsed
.Rendimentos: