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.