Processe uma lista de nomes de arquivos para dividir o diretório e o nome da base

0

Eu tenho um arquivo contendo um monte de nomes de arquivos:

$ cat test_as1
/var/incoming/foo.txt
/var/incoming/bar.txt
/var/incoming/baz.txt

Para cada nome de arquivo, desejo imprimir o nome do diretório e o nome do arquivo base, separados por vírgulas. Por exemplo:

/var/incoming,foo.txt
/var/incoming,bar.txt
/var/incoming,baz.txt

Como posso fazer isso?

    
por user210912 31.08.2018 / 16:41

3 respostas

1

Como @ hhoke1 mencionado em um comentário acima, você pode usar os comandos basename e dirname :

$ basename /var/incoming/new_items.txt
new_items.txt

$ dirname /var/incoming/new_items.txt
/var/incoming
    
por 31.08.2018 / 16:54
1

Você quer dizer algo assim?

sed -e 's/\(.*\)\//,/' -i /var/incoming/new_item.txt
    
por 31.08.2018 / 16:48
1

Você pode percorrer o arquivo e imprimir as partes antes e depois da última barra com a expansão de parâmetros:

while IFS= read -r line; do
    printf '%s,%s\n' "${line%/*}" "${line##*/}"
done < test_as1

"${line%/*}" remove a correspondência mais curta de /* do final da linha e "${line##*/}" remove a correspondência mais longa de */ do início da linha.

    
por 31.08.2018 / 20:17