Как добавить новые столбцы в текстовый файл с умножением нескольких последовательностей?

Следующая процедура работает на 64-битном cygwin

cp configs/Makefile.config_Cygwin_32 Makefile.config

исправить Makefile.config как

--- configs/Makefile.config_Cygwin_32   2015-03-17 16:36:38.000000000 +0100
+++ Makefile.config     2018-01-28 19:37:35.224138200 +0100
@@ -34,7 +34,7 @@
 LINEHDRFLAG =
 XDRFLAG = # -DSUXDR
 ENDIANFLAG = -DCWP_LITTLE_ENDIAN
-LARGE_FILE_FLAG = # -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+LARGE_FILE_FLAG =  -D_FILE_OFFSET_BITS=64 # -D_LARGEFILE64_SOURCE

 CWP_FLAGS = $(LARGE_FILE_FLAG) $(ENDIANFLAG) $(XDRFLAG) $(LINEHDRFLAG)

@@ -59,10 +59,10 @@
 # use both X11 path conventions
 #-----------------------------------------------------------------------

-IX11 = /usr/X11/include
-LX11 = /usr/X11/lib
-IMOTIF = /usr/X11R6/include
-LMOTIF = /usr/X11R6/lib
+IX11 = /usr/include/X11
+LX11 = /usr/lib
+IMOTIF = /usr/include/X11
+LMOTIF = /usr/lib

 LD_LIBRARY_PATH += $(CWPROOT)/lib:${LX11}:${LMOTIF}

@@ -91,7 +91,7 @@

 CC = gcc
 #OPTC = -g  -std=c99 -Wall -pedantic -Wno-long-long
-OPTC = -O  -std=c99 -Wall -pedantic -Wno-long-long
+OPTC = -O   -Wall -pedantic -Wno-long-long
 CFLAGS = -I$I $(OPTC) $(CWP_FLAGS) -D_BSD_SOURCE -D_POSIX_SOURCE

 FC = gfortran

Дополнительный патч дляmake sfinstall

    --- Sfio/src/lib/sfio/Stdio_b/sfstdio.h~        2018-01-28 20:36:09.022523600 +0100
+++ Sfio/src/lib/sfio/Stdio_b/sfstdio.h 2018-01-28 21:21:12.331496700 +0100
@@ -26,7 +26,7 @@

  /* Linux7.2 requires __FILE in wchar.h - we fake it here */
  #include       "FEATURE/sfio"
 -#if _typ___FILE
 +#if defined(_typ___FILE) && !defined(__CYGWIN__)
  typedef FILE   *__FILE;
  #endif

--- Sfio/src/lib/sfio/Stdio_s/stdio_s.h~        2002-09-14 03:01:15.000000000 +0200
+++ Sfio/src/lib/sfio/Stdio_s/stdio_s.h 2018-01-28 20:33:16.400954500 +0100
@@ -4,7 +4,7 @@

 #include       "FEATURE/sfio"

-#if _typ___FILE /* Redhat7.3 requires __FILE in wchar.h */
+#if defined(_typ___FILE) && !defined(__CYGWIN__) /* Redhat7.3 requires __FILE in wchar.h */
 typedef struct _sfio_s *__FILE;
 #endif
0
12.02.2020, 06:07
3 ответа

Предположим, вы имеете в виду после 100, вам нужно добавить 0,2 к каждой записи после. Используя awk, вы можете сделать что-то вроде следующего кода:

awk -v x=2 '{if($1<101){print $0 FS ($1*0.02)}else{x=x+0.2; print $0 FS x}}' file.txt

где:

-vиспользуется, чтобы сообщить awk, что вы используете переменную xс начальным значением2

$1<101, чтобы ваша первая часть кода работала, пока первый столбец меньше101

FS— это статическая переменная в awk, которая содержит разделитель полей вашего файла.

Затем вы можете настроить свой шаг в соответствии с вашими требованиями.

0
28.04.2021, 23:23

Насколько я понимаю, вам нужен 5-й столбец, рассчитанный как умножение 1-го на 0,2

Это можно сделать с помощью awk, например:

 gawk '{printf "%s %.2f\n", $0,$1*0.02}'
0
28.04.2021, 23:23

Существует несоответствие между вашей спецификацией и образцом вывода :со строк 101 по 300, вы хотите, чтобы размер шага был 0.2, но конец последней строки на12-не может быть. 200 шагов по 0,2 дадут «40» -, что составит 42для записи последней строки в $5. Если это правда, попробуйте

$ awk '{print $0, ($1>100)*-18+$1*.02*(1+($1>100)*9)}' file
0 0 0 0  0
1 100 0 0  0.02
2 200 0 0  0.04
3 300 0 0  0.06
. 0
. 0
98 9800 16 16  1.96
99 9900 16 16  1.98
100 10000 15 15 2
101 10100 15 15 2.2
102 10200 15 15 2.4
. 0
199 19900 15 15 21.8
200 20000 15 15 22
201 20100 15 15 22.2
. 0
299 29900 48 48  41.8
300 30000 55 55 42
0
28.04.2021, 23:23

Теги

Похожие вопросы