Eu tenho um arquivo chamado fields.txt e contendo L=300k+ linhas que se parecem com:
field1 field2 field3
field1 field2 field3
field1 field2 field3
...
field1 field2 field3
Na mesma pasta, tenho N arquivos contendo apenas uma sequência (vamos identificá-la s(n) ) e nomeada res-0-n-0 , com n em qualquer lugar entre 0 e L . No entanto N < L .
Gerei o arquivo res_numbers_sorted.tmp contendo a lista numericamente classificada do n acima mencionado com o comando (não tenho certeza se é o mais eficiente, mas é razoavelmente rápido e preciso que isso seja classificado para outros propósitos)
find -maxdepth 1 -type f -name "res-0-*" | sort -t'-' -k3 -n | awk -F'-' '{print $3}'>| res_numbers_sorted.tmp
O arquivo res_numbers_sorted.tmp se parece com:
0
1
8
...
299963
Finalmente, o que eu quero é um arquivo chamado results.txt que gostaria de:
field1 field2 field3 s(0)
field1 field2 field3 s(1)
field1 field2 field3
...
field1 field2 field3 s(299963)
...
field1 field2 field3
onde novamente s(n) é a string contida no n-ésimores-0-n-0.
Eu consegui o que quero primeiro em cp fields.txt resutls.txt e depois com o seguinte while loop:
while IFS='' read -r line; do
#storing the content of the file in a variable
res=$(<res-0-"$line"-0)
# this is needed in order to take into account that sed addresses the first line of a file with the number 1 whereas the file list starts with 0
real_line=$(( line + 1 ))
sed -i "${real_line}s/.$/ ${res}/" field.txt
done < res_numbers_sorted.tmp
No entanto, isso é muito lento e preciso executá-lo várias vezes. Eu suspeito que talvez sed não seja a ferramenta certa para esse trabalho.