У меня есть два текстовых файла, содержание которых следующим образом;
data_1:473428800.0 0 0.000004 1.00 WETZTROPMCIL #4 columns, several lines
473429100.0 0 0.000002 1.00 WETZTROPMCIL
data_2:473428800.0 0 2.100000 1.00 DRYTROPMCIL #4 columns, several lines
473429100.0 0 2.200000 1.00 DRYTROPMCIL
Я должен добавить каждую строку 3-го столбца одного файла к соответствующей строке 3-го столбца в другом файле и заменить этими суммами на 3-й столбец data_1, в новом файле, как ниже;
merged_data= data_1:473428800.0 0 2.1000004 1.00 WETZTROPMCIL #4 columns, several lines
473429100.0 0 2.2000002 1.00 WETZTROPMCIL
Попытка:
paste data_1 data_2 | awk '{$3=sprintf("%.10g", $3+$8); NF=5; print}'
Примечания:
я вижу 5 полей на файл не 4, как указано в OP.
paste
объединит строки из этих двух файлов.
awk
будет видеть строки с 10 полями каждый. NF=5
говорит этому сохранять только первые 5, которые являются от data_1
.
плавание печатается с [s]printf
формат %.10f
. Этот мог бы или не мог бы быть в порядке. См. man 3 printf
.
, Если сортировка необходима, она могла бы быть сделана с заменой процесса:
paste <(sort [args] data_1) <(sort [args] data_2) | awk ...
Метод Matei должен гарантировать, что строки находятся в том же порядке. Поэтому следующий путь будет более безопасным.
sort -k 1n data_1 > data_1_sort
sort -k 1n data_2 > data_2_sort
paste data_1_sort data_2_sort| awk '{$3=sprintf("%.10g", $3+$8); NF=5; print}'