Просьба обновить значение столбца 2, базовое значение столбца 9 и столбцов 11 и 12 - PullRequest
0 голосов
/ 03 мая 2018

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

awk -F"|" -v OFS="|" '{
**if((substr($9,0,2)=="02") && ($11="INV")) {$2="SAP_OSR_INV_FEB"}**
if((substr($9,0,2)=="03") && ($11="INV")) {$2="SAP_OSR_INV_MAR"}
if((substr($9,0,2)=="04") && ($11="INV")) {$2="SAP_OSR_INV_APR"}
if((substr($9,0,2)=="05") && ($11="INV")) {$2="SAP_OSR_INV_MAY"}
if((substr($9,0,2)=="06") && ($11="INV")) {$2="SAP_OSR_INV_JUN"}
if((substr($9,0,2)=="07") && ($11="INV")) {$2="SAP_OSR_INV_JUL"}
if((substr($9,0,2)=="08") && ($11="INV")) {$2="SAP_OSR_INV_AUG"}
if((substr($9,0,2)=="09") && ($11="INV")) {$2="SAP_OSR_INV_SEP"}
if((substr($9,0,2)=="10") && ($11="INV")) {$2="SAP_OSR_INV_OCT"}
if((substr($9,0,2)=="11") && ($11="INV")) {$2="SAP_OSR_INV_NOV"}
if((substr($9,0,2)=="12") && ($11="INV")) {$2="SAP_OSR_INV_DEC"}
**if((substr($9,0,2)=="02") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_FEB"}**
if((substr($9,0,2)=="03") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_MAR"}
if((substr($9,0,2)=="04") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_APR"}
if((substr($9,0,2)=="05") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_MAY"}
if((substr($9,0,2)=="06") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_JUN"}
if((substr($9,0,2)=="07") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_JUL"}
if((substr($9,0,2)=="08") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_AUG"}
if((substr($9,0,2)=="09") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_SEP"}
if((substr($9,0,2)=="10") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_OCT"}
if((substr($9,0,2)=="11") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_NOV"}
if((substr($9,0,2)=="12") && ($12="EXPWT")) {$2="SAP_OSR_EXPORT_DEC"}
if((substr($9,0,2)=="02") && ($11="CR")) {$2="SAP_OSR_CR_FEB"}
if((substr($9,0,2)=="03") && ($11="CR")) {$2="SAP_OSR_CR_MAR"}
if((substr($9,0,2)=="04") && ($11="CR")) {$2="SAP_OSR_CR_APR"}
if((substr($9,0,2)=="05") && ($11="CR")) {$2="SAP_OSR_CR_MAY"}
if((substr($9,0,2)=="06") && ($11="CR")) {$2="SAP_OSR_CR_JUN"}
if((substr($9,0,2)=="07") && ($11="CR")) {$2="SAP_OSR_CR_JUL"}
if((substr($9,0,2)=="08") && ($11="CR")) {$2="SAP_OSR_CR_AUG"}
if((substr($9,0,2)=="09") && ($11="CR")) {$2="SAP_OSR_CR_SEP"}
if((substr($9,0,2)=="10") && ($11="CR")) {$2="SAP_OSR_CR_OCT"}
if((substr($9,0,2)=="11") && ($11="CR")) {$2="SAP_OSR_CR_NOV"}
if((substr($9,0,2)=="12") && ($12="CR")) {$2="SAP_OSR_CR_DEC"}
if((substr($9,0,2)=="02") && $12="CAN") {$2="SAP_OSR_CAN_FEB"}
if((substr($9,0,2)=="03") && $12="CAN") {$2="SAP_OSR_CAN_MAR"}
if((substr($9,0,2)=="04") && $12="CAN") {$2="SAP_OSR_CAN_APR"}
if((substr($9,0,2)=="05") && $12="CAN") {$2="SAP_OSR_CAN_MAY"}
if((substr($9,0,2)=="06") && $12="CAN") {$2="SAP_OSR_CAN_JUN"}
if((substr($9,0,2)=="07") && $12="CAN") {$2="SAP_OSR_CAN_JUL"}
if((substr($9,0,2)=="08") && $12="CAN") {$2="SAP_OSR_CAN_AUG"}
if((substr($9,0,2)=="09") && $12="CAN") {$2="SAP_OSR_CAN_SEP"}
if((substr($9,0,2)=="10") && $12="CAN") {$2="SAP_OSR_CAN_OCT"}
if((substr($9,0,2)=="11") && $12="CAN") {$2="SAP_OSR_CAN_NOV"}
if((substr($9,0,2)=="12") && $12="CAN") {$2="SAP_OSR_CAN_DEC"}}1' file1.txt > file2.txt

Я хочу обновить значение столбца 2 на основе первых двух цифр столбца 9 и значения столбца 11 и столбца 12

Входной файл:

SAP||||||||022018|08AAACT2438A1ZT|INV|EXPWT|262881626|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312397||ZEVD|1210|262881626|||||0
SAP||||||||022018|08AAACT2438A1ZT|INV|EXPWT|262881627|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312569||ZEVD|1210|262881627|||||0
SAP||||||||022018|08AAACT2438A1ZT|INV|TAX|262881628|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312574||ZEVD|1210|262881628|||||0

Текущий неправильный выход. Здесь в столбце 2 получено «SAP_OSR_CAN_FEB», что неверно, а также значение в столбце 11 и столбце 12 также обновлено с «CR» и «CAN», которое не должно быть таким, как требуется обновить значение только в столбце 2

SAP|**SAP_OSR_CAN_FEB**|||||||022018|08AAACT2438A1ZT|**CR**|**CAN**|262881626|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312397||ZEVD|1210|262881626|||||0
SAP|**SAP_OSR_CAN_FEB**|||||||022018|08AAACT2438A1ZT|**CR**|**CAN**|262881627|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312569||ZEVD|1210|262881627|||||0
SAP|**SAP_OSR_CAN_FEB**|||||||022018|08AAACT2438A1ZT|**CR**|**CAN**|262881628|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312574||ZEVD|1210|262881628|||||0

Ожидаемый правильный вывод:

SAP|SAP_OSR_EXPORT_FEB|||||||022018|08AAACT2438A1ZT|INV|EXPWT|262881626|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312397||ZEVD|1210|262881626|||||0
SAP|SAP_OSR_EXPORT_FEB|||||||022018|08AAACT2438A1ZT|INV|EXPWT|262881627|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312569||ZEVD|1210|262881627|||||0
SAP|SAP_OSR_INV_FEB|||||||022018|08AAACT2438A1ZT|INV|TAX|262881628|2018-02-02||||10||||TVH -COCO - VAISHALI|1151040011|8|08|08||||||9984|EVD0|EVD COCO CDMA Material|||0.00|8.47|0.00|0.00|9.00|0.76|9.00|0.76|||||||||||1301312574||ZEVD|1210|262881628|||||0

Условие для применения вкратце:

if ($11 ~ /^INV$) {$2="SAP_OSR_INV_FEB}  append FEB if first two digit of column 9 is 02 or MAR at end in column 2 if first two digit of column 9 is 03
if ($12 ~ /^EXPWT$) {$2="SAP_OSR_EXPORTS_FEB} append FEB if first two digit of column 9 is 02 or MAR at end in column 2 if first two digit of column 9 is 03
if ($11 ~ /^CR$) {$2="SAP_OSR_CR_FEB} append FEB if first two digit of column 9 is 02 or MAR at end in column 2 if first two digit of column 9 is 03
if ($12 ~ /^CAN$) {$2="SAP_OSR_CAN_FEB} append FEB if first two digit of column 9 is 02 or MAR at end in column 2 if first two digit of column 9 is 03

1 Ответ

0 голосов
/ 03 мая 2018

Мои глаза горят от этого программирования "вырезать и вставить".

awk -F"|" -v OFS="|" '
    BEGIN {
        mon["01"] = "JAN"; mon["04"] = "APR"; mon["07"] = "JUL"; mon["10"] = "OCT"
        mon["02"] = "FEB"; mon["05"] = "MAY"; mon["08"] = "AUG"; mon["11"] = "NOV"
        mon["03"] = "MAR"; mon["06"] = "JUN"; mon["09"] = "SEP"; mon["12"] = "DEC"
    }
    # criteria
    $11 == "INV"   { val = $11 }
    $12 == "EXPWT" { val = "EXPORT" }
    $11 == "CR"    { val = $11 }
    $12 == "CAN"   { val = $12 }
    # apply rules
    { $2 = "SAP_OSR_" val "_" mon[substr($9,0,2)] }
    1
' file

Обратите внимание на порядок проверки столбцов 11 и 12: в соответствии с вашими «короткими» критериями,

  1. «CAN» в столбце 12 имеет приоритет над «CR» в столбце 11,
  2. «CR» в столбце 11 имеет приоритет над «EXPWT» в столбце 12
  3. «EXPWT» в столбце 12 имеет приоритет над «INV» в столбце 11

Если эти правила не верны, вы должны быть более точными с вашими критериями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...