awk '
root && $0 != root ".mp3" {printf("%d: %s.flac\n", line, root)}
/.flac$/ {
root=$0
sub(/.flac$/, "", root)
line = NR
next
}
{ root = "" }
' filename
Como isso funciona?
Começando com a linha que começa com /.flac$/
, para cada linha que termina com ".flac", crie uma variável chamada root
contendo a linha menos a extensão. Salva o número da linha atual. Pule para a próxima linha para evitar apagar a variável raiz que acabou de ser definida.
Indo para a primeira linha. Esta expressão root && $0 != root ".mp3"
significa: root
é não vazia E a linha atual ( $0
) não é igual ao valor da variável raiz mais ".mp3". Se essa expressão for avaliada como verdadeira, a linha atual não será o arquivo MP3 correspondente ao arquivo FLAC anterior.
A última linha apaga o valor da variável raiz. Essa parte do script é alcançada apenas se a linha atual não for um arquivo FLAC, portanto, não queremos fazer a comparação com a próxima linha.