Como lidar com uma série de arquivos emparelhados

1

Em uma pasta collection , tenho os seguintes arquivos:

fberry.txt   lberry.txt
fgag.txt     lgag.txt
fred.txt     lred.txt
ftea.txt     ltea.txt
fluck.txt    lluck.txt

Podemos descobrir que esses arquivos podem ser divididos em dois tipos: um começa com f e o outro começa com l . E cada dois arquivos compartilham um mesmo nome (exceto a primeira letra), por exemplo: Em fberry.txt e lberry.txt , berry.txt é o mesmo. Nesses dois arquivos pareados, a primeira coluna de cada arquivo é a mesma, quero mesclar esses dois arquivos (as duas primeiras colunas de lberry.txt e a terceira coluna de fberry.txt ) com base na mesma coluna.

Eu uso o seguinte código:

cd ~/collection
awk 'NR==FNR {h[$1]=$3; next} {print $1,$2,h[$1]}' fberry.txt lberry.txt > tberry.txt

Ele pode produzir o resultado que eu quero, mas eu não sei como lidar com todos esses arquivos emparelhados, caso contrário, eu preciso escrever 5 códigos como este, e se houver mais de 100 arquivos, será um desastre .

Meu resultado esperado é obter cinco novos arquivos: tberry.txt , tgag.txt , tred.txt , ttea.txt e tluck.txt .Obrigado.

    
por lightsnail 16.09.2016 / 23:30

1 resposta

4
for file in f*.txt
do name=${file:1}
awk 'NR==FNR {h[$1]=$3; next} {print $1,$2,h[$1]}' "$file" "l$name" > "t$name"
done

Obrigado a @don_crissti. Aqui, ${file:1} pode extrair os caracteres após o primeiro caractere. Com isso, posso facilmente obter a parte comum dos nomes de arquivos emparelhados. A sintaxe de ${file:1} é ${string: index: length} .

    
por 19.09.2016 / 22:50