awk -F'"' 'NR==1 {fname=$(NF-1);} NR==2{print $(NF-1) >fname;}' file
Explicação
awk
implicitamente percorre todas as linhas de um arquivo. Cada linha é dividida em campos.
-
-F'"'
Isso faz com que a função de caractere de aspas duplas seja o separador de campos. Olhando para a entrada de exemplo, isso significa que os campos que queremos serão os segundos restantes em cada linha
-
NR==1 {fname=$(NF-1);}
A primeira linha tem o nome do arquivo. Em
awk
,NF
é o número de campos em uma linha. Portanto,$(NF-1)
referencia o segundo ao último campo. Seu conteúdo é salvo na variávelfname
. -
NR==2{print $(NF-1) >fname;}
A segunda linha tem o ID como o segundo ao último campo. Nós
print
este ID para um arquivo chamadofname
.
Exemplo
Se o código acima for executado na entrada de amostra, um arquivo TestingFile.txt
será criado no diretório atual:
$ cat TestingFile.txt
9B46BCAEDC9923
Entrada mais complexa
Suponha que o arquivo de entrada se pareça com:
12:"content":"file;\r\n\tfilename=\"TestingFile.txt","date":"2014-10-23"}
13-"refid":"9B46BCAEDC9923","author":"Anon"}]
Como nossos dados não serão mais os segundos para os últimos campos, precisamos alterar o código awk
:
awk -F'"' 'NR==1 {sub(/.*tfilename=\"/, "");fname=$1;} NR==2 {sub(/.*refid":"/,"");print $1>fname;}' file2
Este código remove todos os caracteres antes do nome do arquivo (linha 1) ou ID (linha 2). Depois disso, as informações que desejamos estarão no campo 1. O código é o mesmo.