O comando piped awk funciona como one-liner mas não em loop

0

Eu tenho uma parte de um script que não está funcionando como esperado. É suposto obter uma lista de caminhos de episódios delimitados por novas linhas no formato "/ volume1 / Arquivos compartilhados / Cartoon / Mostrar nome / Mostrar nome SXX / file.mkv" (citações incluídas no arquivo de lista), executar esses arquivos através de mediainfo e acrescente o UID a cada linha.

Eu posso obter o UID com o one-liner

/volume1/@appstore/nzbdrone/bin/mediainfo "/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv" | grep Unique | awk '{print $4}'

No entanto, ao executar o seguinte código:

while read line; do
echo $line
/volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}' > $WorkingDir/output2.txt
echo '/volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}''
var1='echo /volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}''
echo $var1
done < $WorkingDir/output.txt

Eu recebo a seguinte saída:

"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"

Eu sei que isso não iria acrescentar os UIDs onde eu quero, isso é apenas uma tentativa de depuração. Eu esperaria que pelo menos uma dessas duas linhas em branco entre cada linha de eco contivesse o UID. Eu não sei onde está dando errado: /

(executando sob bash em um Synology DS412 +)

    
por boardwarp 10.01.2015 / 14:21

1 resposta

0

As aspas duplas estão sendo lidas na variável line e passadas como parte do parâmetro para mediainfo . Eu nunca gostei de usar read para ler linhas inteiras, preferindo usar o comando line .

Você deve remover as aspas da entrada e usar: -

while line='line'; do
. . . . . .
/volume1/@appstore/nzbdrone/bin/mediainfo "$line" | grep Unique | awk '{print $4}' > $WorkingDir/output2.txt
. . . . . .

Você deve citar duas vezes todas as instâncias de $line , não apenas na linha que mostrei.

Observe que line lê as linhas com precisão, incluindo os espaços em branco iniciais e finais que read retira.

    
por 10.01.2015 / 15:00