#tcl
#tcl
Вопрос:
Дорогие, у меня есть следующая информация (x y z) в файле «data.dat»:
24.441 53.481 41.474
23.920 53.389 42.572
24.470 52.228 42.012
24.875 51.313 42.524
23.663 51.323 42.701
Мне требуется переписать информацию следующим образом:
{24.441 53.481 41.474} {23.920 53.389 42.572}
{23.920 53.389 42.572} {24.470 52.228 42.012}
{24.470 52.228 42.012} {24.875 51.313 42.524}
{24.875 51.313 42.524} {23.663 51.323 42.701}
Это для большого файла данных. Как я мог бы сделать это в TCL. Заранее спасибо за помощь.
Ответ №1:
set infile "data.dat"
set outfile [file tempfile]
set in [open $infile r]
set out [open $outfile w]
gets $in prev_line
while {[gets $in line] != -1} {
puts $out [format "{%s} {%s}" $prev_line $line]
set prev_line $line
}
close $in
close $out
# remove next line if you don't need to keep a backup of the initial file
file link -hard "${infile}.bak" $infile
# and overwrite the original file with the new contents
file rename -force $outfile $infile
или вызовите GNU awk, чтобы сделать это
exec gawk -i inplace {
NR == 1 {prev = $0; next}
{printf "{%s} {%s}n", prev, $0; prev = $0}
} data.dat
Комментарии:
1. Вы можете задаться вопросом, можете ли вы редактировать данные на месте. Технически да, но это опасно (с любым языком программирования), если данные изменяют длину любой строки. Намного проще корректно выполнить запись в отдельный файл.