cant: Agarrando e substituindo todos os dados entre a última barra invertida e uma vírgula

1

Eu tenho dados em um formato csv com esta aparência:

F1309-042543,07/14/09 01:39:25,N/A,C:\windows\system32\netsh.exe,N/A,True
F1309-042543,11/21/10 03:24:02,N/A,C:\Windows\System32\networkexplorer.dll,N/A,False
F1309-042543,07/14/09 01:38:53,N/A,C:\windows\system32\scrnsave.scr,N/A,True
F1309-042543,11/21/10 03:25:10,N/A,C:\windows\SYSTEM32\WISPTIS.EXE,N/A,True
F1309-042543,05/03/14 22:05:42,N/A,C:\windows\ccmcachet\SafeNet High Assurance Client (x64) 2.12.009.exe,N/A,True

Como posso entrar no quarto campo (o caminho do Windows) e pegar o nome do processo (o caractere final '\' até a vírgula subseqüente) e adicionar esse nome do processo como seu próprio campo, separado por uma vírgula? O resultado final ficaria assim:

F1309-042543,07/14/09 01:39:25,N/A,C:\windows\system32\netsh.exe,netsh.exe,N/A,True
F1309-042543,11/21/10 03:24:02,N/A,C:\Windows\System32\networkexplorer.dll,networkexplorer.dll,N/A,False
F1309-042543,07/14/09 01:38:53,N/A,C:\windows\system32\scrnsave.scr,scrnsave.scr,N/A,True
F1309-042543,11/21/10 03:25:10,N/A,C:\windows\SYSTEM32\WISPTIS.EXE,WISPTIS.EXE,N/A,True
F1309-042543,05/03/14 22:05:42,N/A,C:\windows\ccmcachet\SafeNet High Assurance Client (x64) 2.12.exe,SafeNet High Assurance Client (x64) 2.12.exe,N/A,True

Em suma, quero tirar o nome do processo desse caminho do Windows e torná-lo seu próprio campo no CSV. Eu tenho uma suspeita de que o sed é a ferramenta para fazer isso, mas não tenho certeza de como fazê-lo. Muito obrigado.

    
por Ambrose Burnside 15.06.2016 / 21:16

2 respostas

0

Não é 100% claro para mim porque os resultados esperados são idênticos ao conteúdo do arquivo, mas deixe-me tentar.

Se você quiser apenas o nome do arquivo nesta lista:

cat thebigfile.csv | rev | cut -d'\' -f1 | rev | cut -d',' -f1 

O resultado será:

netsh.exe
networkexplorer.dll
scrnsave.scr
WISPTIS.EXE
SafeNet High Assurance Client (x64) 2.12.exe

Isso ajuda?

    
por 15.06.2016 / 21:40
3

com sed :

sed 's/.*\\([^,]*,\)/&/' file

Saída:

F1309-042543,07/14/09 01:39:25,N/A,C:\windows\system32\netsh.exe,netsh.exe,N/A,True
F1309-042543,11/21/10 03:24:02,N/A,C:\Windows\System32\networkexplorer.dll,networkexplorer.dll,N/A,False
F1309-042543,07/14/09 01:38:53,N/A,C:\windows\system32\scrnsave.scr,scrnsave.scr,N/A,True
F1309-042543,11/21/10 03:25:10,N/A,C:\windows\SYSTEM32\WISPTIS.EXE,WISPTIS.EXE,N/A,True
F1309-042543,05/03/14 22:05:42,N/A,C:\windows\ccmcachet\SafeNet High Assurance Client (x64) 2.12.009.exe,SafeNet High Assurance Client (x64) 2.12.009.exe,N/A,True

BTW, esteja ciente de ^M em vez de \n em seu arquivo original.

    
por 15.06.2016 / 21:51