Como executo um comando em uma determinada string em cada linha de um arquivo?

2

Vamos supor que eu já tenha um arquivo criado. Esta criação de arquivo vem da execução de um comando. O conteúdo do arquivo será de até 4 linhas diferentes com algo parecido com isto:

LUN Path:  servernam:/vol/server_xx_t1_01_223_04/mssql01/server_StorageSystemLevel100.lun
LUN Path:  servernam:/vol/server_xx_t1_01_225_04/mssql01/server_StorageSystemLevel100.lun
LUN Path:  servernam:/vol/server_xx_t1_01_226_04/mssql01/server_StorageSystemLevel100.lun
LUN Path:  servernam:/vol/server_xx_t1_01_228_04/mssql01/server_StorageSystemLevel100.lun

Como posso canalizar / awk / qualquer que seja esse arquivo para que eu possa obter a segunda string, ou seja, "servernam: / vol / serverxxxx", e, em seguida, execute um comando como:

rm  servernam:/vol/server_xx_t1_01_228_04/mssql01/server_StorageSystemLevel100.lun

Por isso, quero extrair a string correta do arquivo e incluí-la como um argumento para um comando. Note que eu precisaria fazer o mesmo comando de execução em todas as 4 strings diferentes. Um exemplo de script, ou melhor ainda, tudo da linha de comando, seria muito apreciado.

    
por user10414 01.09.2011 / 15:33

3 respostas

6

ls $(awk '{print $3}' /path/to/your/file)

verifique se isso funciona como esperado e, em seguida, substitua ls por rm

    
por 01.09.2011 / 15:41
0
echo rm $(sed -n -e 's/[^A-Za-z0-9]/\&/g' -e 's/LUN Path:  *//p')

O primeiro comando s adiciona uma barra invertida antes de cada caractere que não seja uma nova linha, uma letra ou um dígito. O segundo comando retira o prefixo LUN Path: das linhas que o contêm e imprime somente as linhas que possuem o prefixo. A string resultante sofre expansão de nome de arquivo e divisão de palavras no shell; uma vez que todos os caracteres problemáticos, exceto as novas linhas foram escapados, os nomes dos arquivos apropriados serão passados para o comando.

    
por 02.09.2011 / 01:10
0
cut -d: -f3 file | xargs rm

O comando cut selecionará o terceiro campo : -delimited do arquivo (o nome do arquivo após servernam: ), enquanto o comando xargs lerá esses caminhos delimitados por novas linhas e os alimentará em rm .

Se você quiser que servernam: faça parte do caminho real, substitua o comando cut por awk '{ print $NF }' , que extrairá o último campo delimitado por espaço em branco em cada linha.

Isso usando cut assume que não há : nos nomes de caminho, e usar awk assume que os caminhos não contêm espaços em branco.

    
por 27.04.2018 / 11:20