Conduzir operação de cadeia de várias linhas com awk em vez de for-loop

0

Suponha que um arquivo de texto de várias linhas ( file1 ) contenha caminhos de arquivo.

$ cat file1
./foo/foo
./foo/bar
./foo/baz

Gostaria de salvar apenas os nomes dos arquivos em file2 e preceder cada nome de arquivo com alguns caracteres especiais (por exemplo, [# ).

Eu sei que posso fazer isso através de um simples loop, mas eu entendo que isso é considerado uma prática desfavorável.

for line in $(cat file1); do
echo "[#" $(basename "$line") >> file2;
done

Eu acredito que essa tarefa pode ser feita de forma mais limpa via awk , mas o código abaixo é apenas um fragmento. Como faço para executar a tarefa acima com awk ?

awk '{print "[#",$0=$(basename $0)}' $file1 > $file2
    
por Michael Gruenstaeudl 18.05.2017 / 20:11

2 respostas

1

Use / como o separador de campo e imprima o último campo:

$ awk -F/ '{print "[#"$NF}' file1
[#foo
[#bar
[#baz
    
por 18.05.2017 / 20:15
0
sed -e 's|.*/|[#|' file1

Resultado

[#foo
[#bar
[#baz
    
por 19.05.2017 / 13:47

Tags