Ваш вопрос был частично противоречивым. Похоже, у вас есть два файла с двумя столбцами в каждом, то есть x,f(x)
и x,g(x)
. Я предполагаю, что количество строк и значения х идентичны. И вы «просто» хотите построить f(x)
против g(x)
. Но это не так же, как построение f(g(x))
(как в вашем первоначальном вопросе). В последнем случае вам, вероятно, потребуется интерполяция.
@ Кристоф уже указал на простое решение, объединяющее файлы с помощью awk. Если у вас нет или вы не хотите использовать awk, вот несколько громоздкое решение gnuplot-only .
- загрузка файлов 1: 1 в блок данных (см. gnuplot: загрузить файл данных 1: 1 в блок данных , хотя, пока еще не полностью ответил)
- удалить символы конца строки. Это зависит от операционной системы. Для Windows я должен поставить
\r
в качестве символа конца строки (по некоторым причинам не \r\n
). В настоящее время я не могу проверить Linux и MacOS. - распечатать / добавить строки в новый блок данных
Данные:
f.txt
A,B
1,3
2,6
3,5
g.txt
A,C
1,8
2,4
3,7
Код:
### merge two files (merging their lines)
# assumption: equal number of lines in each file
reset session
# load files 1:1 to datablocks
FILE1 = 'f.txt'
if (GPVAL_SYSNAME[:7] eq "Windows") { load '< echo $Data1 ^<^<EOD & type "'.FILE1.'"' }
else { load '< echo "\$Data1 << EOD" & cat "'.FILE1.'"' } # Linux & MacOS
FILE2 = 'g.txt'
if (GPVAL_SYSNAME[:7] eq "Windows") { load '< echo $Data2 ^<^<EOD & type "'.FILE2.'"' }
else { load '< echo "\$Data2 << EOD" & cat "'.FILE2.'"' } # Linux & MacOS
mySeparator = ","
myEOLc = sprintf("\r",0) # End of Line character Linux: "\n", Windows: "\r\n", Mac: "\r"
# function for removing EOL character(s) from a string
RemoveEOLc(s) = s[strlen(s)-strlen(myEOLc)+1:strlen(s)] eq myEOLc ? s[1:strlen(s)-strlen(myEOLc)] : s
set print $Data3
do for [i=1:|$Data1|] {
print sprintf("%s%s%s", RemoveEOLc($Data1[i]), mySeparator, RemoveEOLc($Data2[i]))
}
set print
print $Data3
### end of code
Результат:
A,B,A,C
1,3,1,8
2,6,2,4
3,5,3,7
Затем выведите ваши данные так, как вам нравится ...
Дополнение:
Если у ваших файлов есть пробел в качестве разделителя столбцов, вы можете использовать word("string",n)
извлечь "столбец" из $Data[i]
(см. help word
). Затем вам нужно изменить строки:
mySeparator = " "
и
print sprintf("%s%s%s", word(RemoveEOLc($Data1[i]),2), mySeparator, word(RemoveEOLc($Data2[i]),2))
Результат:
B C
3 8
6 4
5 7