Я хотел бы напечатать строку с формулой переменной, используя awk в нескольких строках

Я унаследовал скрипт, который берет файл и извлекает из него некоторые данные, создает новый файл и на основе этих данных пишет формулу на основе извлеченных данных. Извлеченные данные различаются по количеству при каждом прогоне, однако эти данные непротиворечивы в том месте, где они находятся, как и в используемой формуле.

На данный момент сценарий записывает формулу, и, поскольку она жестко закодирована, ссылки на ячейки остаются одинаковыми для каждой строки. Я хотел бы, чтобы эта формула была написана для ссылки на строку, в которой она находится, а не на то, что сейчас жестко запрограммировано, которая ссылается на вторую строку - первую строку формулы, которая является правильной.

На данный момент ниже выводится формула для всех строк - я хочу, чтобы она была динамической и ссылалась на фактически строку, в которой находится формула.

awk -F"," 'NR==1 {
   for (i=1;i<=NF;i++) {
      if ($i=="Primary") {
         Primary=i;
      }
      if ($i=="Sub Type") {
         Sub_Type=i;
      }   
      if ($i=="METHOD") {
         METHOD=i;
      }
      if ($i=="GLOBAL") {
         GLOBAL=i;
      }
     if ($i=="UNIQUE") {
         UNIQUE=i;
      }   
      if ($i=="ID") {
         ID=i;
      }
      if ($i=="PRIVATE_PLACEMENT") {
         PRIVATE_PLACEMENT=i;
      }
   }
}
NR > 1 {print $METHOD "," $Sub_Type "," $Primary "," $GLOBAL "," $ID "," $UNIQUE "," "\"\=abc\(D2\&\"\" xxxx\"\"\,\"\"SECURITY\"\"\"\)" "," "\"\=xyz\(D2\&\"\" xxxx\"\"\,\"\"last\"\"\,\"\"01\/01\/1900\"\"\,Today\(\)\,\"\"Quote\"\"\,\"\"P\"\"\,\"\"Points\=1\"\"\,\"\"cols\=2\;rows\=1\"\")\"" "," "," "," "\"\=xyz\(E2\&\"\" xxxx\"\"\,\"\"last\"\"\,\"\"01\/01\/1900\"\"\,Today\(\)\,\"\"Quote\"\"\,\"\"P\"\"\,\"\"Points\=1\"\"\,\"\"cols\=2\;rows\=1\"\")\"" "," "," "," "\"\=xyz\(F2\&\"\" buid\"\"\,\"\"last\"\"\,\"\"01\/01\/1900\"\"\,Today\(\)\,\"\"QuoteType\"\"\,\"\"P\"\"\,\"\"Points\=1\"\"\,\"\"cols\=2\;rows\=1\"\")\"" "," "," "," "\"\=abc\(D2\&\"\" xxxx\"\"\,\"\"source\"\"\"\)" "," "\"\=abc\(D2\&\"\" xxxx\"\"\,\"\"CRNCY\"\"\"\)""," "\"\=abc\(D2\&\"\" xxxx\"\"\,\"\"CRNCY\"\"\"\)" "," "\"\=IF\(ISBLANK\(H2\)\,\"\"\"\"\,IF\(ISBLANK\(K2\)\,\"\"\"\"\,IF\(H2\=K2\,\"\"Match\"\"\,\"\"No Match\"\"\"\)\)\)" ","  "\"\=IF\(ISBLANK\(H2\)\,\"\"\"\"\,IF\(ISBLANK\(N2\)\,\"\"\"\"\,IF\(H2\=N2\,\"\"Match\"\"\,\"\"No Match\"\"\"\)\)\)" "," "\"\=IF\(ISBLANK\(K2\)\,\"\"\"\"\,IF\(ISBLANK\(N2\)\,\"\"\"\"\,IF\(K2\=N2\,\"\"Match\"\"\,\"\"No Match\"\"\"\)\)\)" "," "," "=C2" "," "" "," "=H2" "," "=I2" "," "=Q2" "," "=R2"}' $WORK_DIR/sortedmissing.csv > $WORK_DIR/output1.xls

Какой лучший способ сделать это? Есть ли функция для перетаскивания формулы из 7-го столбца - от последнего столбца до последней строки в файле? Или есть функция цикла, которая могла бы сделать это для меня?

Входной файл - это файл .xlsx, который открывается, и некоторые данные извлекаются отсюда и помещаются в новый файл - это может быть произвольно.

Method  Primary Sub Type    GLOBAL  ID  UNIQUE
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz
    123456789^DEFAULT^EOD^2019-07-12    Missing abcdefj 1234567 xyzxyz

вывод будет выглядеть следующим образом в csv - первая строка - это заголовки, а затем - 5 столбцов данных, скопированных из входного файла - столбец 6 и по всему сценарию создает ряд формул, которые повторяются в каждой строке с одной и той же ссылкой на ячейку, однако я хочу сделать эту ссылку строкой, в которой она находится в D2, в строке 3 должна быть D3 и т. д.

Method  Sub Type    Primary GLOBAL  ID  UNIQUE SECURITY_TYP FIGI LAST_UPDATE_DT 
Missing Price   123456^XXXXX^XXXXXEOD^2019-07-12 1234567890 1234567 123456789   =xxx(D2&" figi","SECURITY_TYP") =xxx(D2&" figi","last","01/01/1900",BToday(),"QuoteType","P","Points=1") I  
Missing Price 123456^XXXXX^XXXXXEOD^2019-07-12  1234567890  1234567 123456789   =BDP(D2&" figi","SECURITY_TYP") =xxxx(D2&" figi","last","01/01/1900",BToday(),"QuoteType","P","Points=1") 

Вывод в истинной форме

Method,Sub Type,Primary,GLOBAL,ID,UNIQUE,SECURITY_TYP,FIGI LAST_UPDATE_DT,FIGI PX_LAST,,SEDOL LAST_UPDATE_DT,SEDOL PX_LAST,,BB_UNIQUE LAST_UPDATE_DT,BB_UNIQUE PX_LAST,,PRICING_SOURCE,CRNCY,QUOTED_CRNCY,FIGI SEDOL PRICE CHECK,FIGI PRICE CHECK,SEDOL PRICE CHECK,,PrimaryIdentifier,CL_SUBSCRIBER,PRICE_DATE,BPL_SERVICE_PRICE,BPL_PRICING_SOURCE,PRICE_CRNCY
,Missing Price,123456789^DEFAULT^EOD^2019-07-19,abcdefj,123456,xyzxyzxyz,"=abc(D2&"" moon"",""TYP"""),"=abc(D2&"" moon"",""last"",""01/01/1900"",BToday(),""QuoteType"",""P"",""Points=1"",""cols=2;rows=1"")",,,"=abc(E2&"" star"",""last"",""01/01/1900"",BToday(),""QuoteType"",""P"",""Points=1"",""cols=2;rows=1"")",,,"=abc(F2&"" buid"",""last"",""01/01/1900"",BToday(),""QuoteType"",""P"",""Points=1"",""cols=2;rows=1"")",,,"=abc(D2&"" moon"",""pricing_source"""),"=abc(D2&"" moon"",""CRNCY"""),"=abc(D2&"" moon"",""QUOTED_CRNCY"""),"=IF(ISBLANK(H2),"""",IF(ISBLANK(K2),"""",IF(H2=K2,""Match"",""No Match"""))),"=IF(ISBLANK(H2),"""",IF(ISBLANK(N2),"""",IF(H2=N2,""Match"",""No Match"""))),"=IF(ISBLANK(K2),"""",IF(ISBLANK(N2),"""",IF(K2=N2,""Match"",""No Match"""))),,=C2,,=H2,=I2,=Q2,=R2
I,Missing Price,123456789^DEFAULT^EOD^2019-07-19,abcdefj,,123456,"=abc(D2&"" moon"",""TYP"""),"=abc(D2&"" moon"",""last"",""01/01/1900"",BToday(),""QuoteType"",""P"",""Points=1"",""cols=2;rows=1"")",,,"=abc(E2&"" star"",""last"",""01/01/1900"",BToday(),""QuoteType"",""P"",""Points=1"",""cols=2;rows=1"")",,,"=abc(F2&"" buid"",""last"",""01/01/1900"",BToday(),""QuoteType"",""P"",""Points=1"",""cols=2;rows=1"")",,,"=abc(D2&"" moon"",""pricing_source"""),"=abc(D2&"" moon"",""CRNCY"""),"=abc(D2&"" moon"",""QUOTED_CRNCY"""),"=IF(ISBLANK(H2),"""",IF(ISBLANK(K2),"""",IF(H2=K2,""Match"",""No Match"""))),"=IF(ISBLANK(H2),"""",IF(ISBLANK(N2),"""",IF(H2=N2,""Match"",""No Match"""))),"=IF(ISBLANK(K2),"""",IF(ISBLANK(N2),"""",IF(K2=N2,""Match"",""No Match"""))),,=C2,,=H2,=I2,=Q2,=R2

То, что вы видите здесь, это то, что приведенный выше код записывает строку с формулой в две строки, но использует те же ссылки на ячейки «D2» - я бы хотел, чтобы во втором ряду была ссылка на D3 и т. Д.

Заранее спасибо

0
задан 19 July 2019 в 17:30

0 ответов

Другие вопросы по тегам:

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