Saída de comando print lado a lado

0

A seguir, minha saída de comando:

# ls -la | grep -i text | awk '{print $9}' 
text1.txt
text2.txt
text3.txt
text4.txt

Eu queria imprimir o valor de saída como:

text1.txt:text2.txt:text3.txt:text4.txt
    
por Rama Krishna S 20.02.2018 / 16:29

5 respostas

0

Oi Mohammad Alzatari Ans ajudou-me a resolver este problema.

$ ls -la | grep -i text | awk '{printf ":%s", $9}'|awk '{print substr($1,2);}'

text1.txt:text2.txt:text3.txt:text4.txt

Problema resolvido

    
por 21.02.2018 / 02:03
2

Não, não não analise ls . Você quer

( files=(*text*); IFS=:; echo "${files[*]}" )

Eu uso um subshell para que a variável IFS no seu shell atual não seja afetada.

Se tiver certeza de que seus nomes de arquivos não contêm caracteres de nova linha, faça

ls -1 *text* | paste -sd:
    
por 20.02.2018 / 18:20
1

Você poderia jogar coisas em um script bash da seguinte forma:

unset list
for file in 'ls -a | grep -i 'text''; do list=$list"$file:"; done
echo ${list::-1}

O unset inicial é para remover os valores anteriores se você estiver executando o comando várias vezes. Para se livrar dos dois pontos finais (:), você pode fazer isso enquanto você está com echo se estiver executando o bash 4.2 ou superior, como eu tenho no meu código.

    
por 20.02.2018 / 17:26
1

por favor, tente isso, deve funcionar

$ ls -la | grep -i text | awk '{printf ": %s", $9}'
    
por 20.02.2018 / 17:45
0

Não é uma solução exata e precisa de algumas melhorias.

Basta enviar a saída para tr

$ ls -la | grep -i text | awk '{print $9}' | tr '\n' ':'

text1:text2:text4:text5:

Não consegui remover o último : no final e também não consegui chegar à próxima linha.

    
por 20.02.2018 / 17:16