Extrai o nome do arquivo de outro nome de arquivo

1

Eu recebo arquivos de notificação para arquivos diferentes. Eu quero extrair o nome do arquivo desses arquivos de notificação que eu usaria em outro processo. As primeiras 4 strings do arquivo de notificação serão sempre ignoradas. Portanto, o nome do arquivo começa na posição 5, pode começar com qualquer caractere e termina no .csv . O nome do arquivo pode ser de qualquer tamanho.

Um exemplo:

NotificationFile = 'NFT_PPF_STANDARD_1720156B_NBIRNans_DFT_TILT_EOF_FFP_20160619-10.csv_16062000352520'
NotificationFile = 'NFT_PPF_IMPULSE_172555A_Acc_Account_FFP_20160619-10.csv_16062000352520'
NotificationFile = 'NFT_PPF_IMPULSE_172555A_CRI_Position_FFP_20160619-10.csv_16062000352520'

Os nomes dos arquivos, respectivamente:

Filename = 'NBIRNans_DFT_TILT_EOF_FFP_20160619-10.csv'
Filename = 'Acc_Account_FFP_20160619-10.csv'
Filename = 'CRI_Position_FFP_20160619-10.csv'

Eu uso o seguinte comando para extrair o nome do arquivo do nome do arquivo de notificação, mas ele só funciona se o nome do arquivo contiver apenas 3 '_s:

Extract = echo $NotificationFile | cut -d "_" -f5-8
# $NotificationFile is the NotificationFile above
# Extract should be equal to Filename 

O que é um comando geral que eu posso usar para qualquer comprimento de nome de arquivo?

    
por deon 20.06.2016 / 11:33

3 respostas

0

Para o que você deseja, você pode usar sed . É assim que eu faria.

sed -ne 's/.*\(NB.*\)\_.*$/\FILENAME =  /p' 
    
por 20.06.2016 / 12:05
0

Se todos os nomes de arquivo terminarem com .csv e não contiverem outro .csv em qualquer lugar, use por exemplo. sed para remover tudo depois disso:

Extract=$(echo $NotificationFile | sed 's/\.csv.*/.csv/')

Combinando isso com o que você tinha antes:

Extract=$(echo $NotificationFile | sed 's/\.csv_.*/.csv/' | cut -d "_" -f5-)

O intervalo N- significa "até o final da linha", ou seja. não parando no dia 8 se não houvesse exatamente 3 _ s no nome do arquivo.

    
por 20.06.2016 / 13:06
0

Use as construções de manipulação de string da expansão do parâmetro .

filename="${NotificationFile#????}"
filename="${filename%.csv*}.csv"

A primeira linha define filename para o valor de NotificationFile com os primeiros quatro caracteres removidos. A segunda linha remove tudo de filename começando com .csv e adiciona novamente .csv para compensar.

    
por 21.06.2016 / 01:53