Evite loops para processar texto . Aqui:
grep 'service[123]' filex | paste -sd , -
Ou:
grep 'service1
service2
service3' filex | paste -sd , -
Eu não posso escolher um título correto para o meu cenário e, por favor, edite-o se você sabe qual é o meu problema.
Eu tenho um cenário onde estou criando uma nova variável que terá apenas os valores servces
de uma lista de valores disponíveis em filex
.
$ cat filex
all_name1_db
all_name2_dm
alm_service1_ax
all_name3_du
alz_name4_dx
ali_name5_dk
alk_service2_av
alf_name6_df
alj_name7_dq
Aqui está o código que eu uso para criar uma variável services
, que terá apenas os valores que possuem serviços.
for x in $filex
do
if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]];then
Services+=$x","
fi
done
Meu resultado final será um valor delimitado por vírgulas mostrado abaixo.
$ cat $Services
alm_service1_ax,alk_service2_av
O problema agora é que o valor service
continua aumentando em filex
e não posso estender minha declaração if
adicionando ||
. Por exemplo, se eu tiver um novo serviço, digamos bum_service3_bk
incluído em filex
, então minha instrução if
ficaria assim ...
...
if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]] || [[ $x == *"service3"* ]] ;then
...
e isso continuará aumentando a cada novo service
adicionado em filex
Existe uma maneira de escrever uma instrução if
para ter uma única condição que possa acomodar várias condições ou uma maneira melhor de resolver meu problema?
Evite loops para processar texto . Aqui:
grep 'service[123]' filex | paste -sd , -
Ou:
grep 'service1
service2
service3' filex | paste -sd , -
Se você precisar de uma resposta de linha, use:
grep "service" filex | xargs echo | sed 's/ /, /g'
OR
se você precisar de sintaxe condicional, poderá fazer o seguinte:
while read -r line
do
if [[ $line == *"service"* ]]
then
Services+=("$line")
fi
done < "/tmp/filex"
echo "${Services[@]}" | tr ' ' ,
Vai dar como:
alm_service1_ax,alk_service2_av,alk_service5_av,alk_service3_aff,alk_service5_afds
/tmp/filex
- é o caminho do seu arquivo
echo "${Services[@]}" | tr ' ' ,
- imprimindo matriz separada por vírgula