Распечатать результат по порядку - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть входной файл txt, например,

999844634|715717657|1508241298     |000018995|INSTALACION DECO + PUNTO TV ADIC DIGITAL|000000001|ALTA                                    |73479107                                |2019-03-15|246221122|0001|671564720|002|DNI|02842909            |
999844634|715717657|1508241298     |000021932|DECODER HD ZAPPER COMODATO              |000000001|ALTA                                    |73479107                                |2019-03-15|246221122|0001|671564720|002|DNI|02842909            |
999844634|715717657|1508241298     |000021932|DECODER HD ZAPPER COMODATO              |000000001|ALTA                                    |73479107                                |2019-03-15|246221122|0001|671564720|002|DNI|02842909            |
999846100|745304617|1501278792     |000018995|INSTALACION DECO + PUNTO TV ADIC DIGITAL|000000001|ALTA                                    |12544155                                |2019-03-15|248309282|0002|774235318|003|DNI|29600747            |
999846100|745304617|1501278792     |000021148|BLOQUE CATV FULL HD                     |000000001|ALTA                                    |12544155                                |2019-03-15|248309282|0002|774235318|003|DNI|29600747            |
999846100|745304617|1501278792     |000021251|DECODIFICADOR SD TV VENTA CATV          |000000046|BAJA MIGRACION DE P/S                   |12544155                                |2019-03-15|248309282|0001|774235318|003|DNI|29600747            |
999846100|745304617|1501278792     |000021956|INSTALACION PUNTO TV ANALOGICO ALTA     |000000046|BAJA MIGRACION DE P/S                   |12544155                                |2019-03-15|248309282|0001|774235318|003|DNI|29600747            |

, и у меня есть скрипт, который преобразует эти данные

    system=ATIS
    username=AUTOMATICO
    fecha=$(date +"%Y%m%d_%H%M%S")
    header="$system|$file|$fecha|$username|"
    #echo $header


    ## quitar espacios tr -s " "
    ## concatenar sed -e 's/^/'$header'/g'
    ## cadena awk -F'|' '{print $6"|"$7"|"$14"|"$15"|"$8"|"$4}'


    #### ALTA

    operacion="ALTA|"

    temp1=$(cat $file | grep -i -e '001.*ALTA' | awk -F'|' '{print $14"|"$15"|"$8"|"$4}' | sed -e 's/^/'$header$operacion'/g' | sed -e 's/ //g' )

    #### ELIMINAR

        operacion="ELIMINAR|"

  temp2=$(cat $file | grep -i -e '046.*BAJA FINAL' -e '008.*BAJA FINAL' -e '012.*BAJA FINAL' | awk -F'|' '{print $14"|"$15"|"$8"|"$4}' | sed -e 's/^/'$header$operacion'/g' | sed -e 's/ //g' )
    #### BAJA

        operacion="BAJA|"

    temp3=$(cat $file | grep -i -e '008.*BAJA APC' -e '046.*BAJA MIGRACION' | awk -F'|' '{print $14"|"$15"|"$8"|"$4}' | sed -e 's/^/'$header$operacion'/g' | sed -e 's/ //g' )

    #### ACTIVAR

        operacion="ACTIVAR|"

        temp4=$(cat $file | grep -i -e '027.*RECONEXION APC' -e '028.*RECONEXION DEUDA' -e '042.*RECONEXION TIPIFICADA' | awk -F'|' '{print $14"|"$15"|"$8"|"$4}' | sed -e 's/^/'$header$operacion'/g' | sed -e 's/ //g' )

    #### DESACTIVAR

    operacion="DESACTIVAR|"

    temp5=$(cat $file | grep -i -e '031.*SUSPENSION APC' -e '032.*SUSPENSION PARCIAL DEUDA' -e '033.*SUSPENSION TOTAL DEUDA' -e '040.*SUSPENCION TIPIFICADA PARCIAL' -e '041.*SUSPENCION TIPIFICADA TOTAL' | awk -F'|' '{print $14"|"$15"|"$8"|"$4}' | sed -e 's/^/'$header$operacion'/g' | sed -e 's/ //g' )

    #### MANTENER

    temp6=$(cat $file | grep -i -e '046.*ALTA - BAJA  MIGRACION' -e '047.*ALTA - BAJA  MIGRACION' | awk -F'|' '{print $14"|"$15"|"$8"|"$4}' | sed -e 's/^/'$header$operacion'/g' | sed -e 's/ //g' )

#### CAMBIO TITULARIDAD

        operacion="CAMBTITU|"

    temp7=$(cat $file | grep -i -e '018.*CAMBIO DE TITULAR' | awk -F'|' '{print $14"|"$15"|"$8"|"$4}' | sed -e 's/^/'$header$operacion'/g' | sed -e 's/ //g' )


    ##armar los archivos

    #echo "$temp1" > ATIS_ALTA_temp.txt
    #echo "$temp2" > ATIS_ELIMINAR_temp.txt
    #echo "$temp3" > ATIS_BAJA_temp.txt
    #echo "$temp4" > ATIS_ACTIVAR_temp.txt
    #echo "$temp5" > ATIS_DESACTIVAR.txt

    echo "$temp1" > ${system}_ALL.txt
    echo "$temp2" >> ${system}_ALL.txt
    echo "$temp3" >> ${system}_ALL.txt
    echo "$temp4" >> ${system}_ALL.txt
    echo "$temp5" >> ${system}_ALL.txt
    echo "$temp7" >> ${system}_ALL.txt

в эти выходные данные

ATIS|testArnold2.txt|20190408_111317|AUTOMATICO|ALTA|DNI|02842909|73479107|000018995
ATIS|testArnold2.txt|20190408_111317|AUTOMATICO|ALTA|DNI|02842909|73479107|000021932
ATIS|testArnold2.txt|20190408_111317|AUTOMATICO|ALTA|DNI|02842909|73479107|000021932
ATIS|testArnold2.txt|20190408_111317|AUTOMATICO|ALTA|DNI|29600747|12544155|000018995
ATIS|testArnold2.txt|20190408_111317|AUTOMATICO|ALTA|DNI|29600747|12544155|000021148
ATIS|testArnold2.txt|20190408_111317|AUTOMATICO|BAJA|DNI|29600747|12544155|000021251
ATIS|testArnold2.txt|20190408_111317|AUTOMATICO|BAJA|DNI|29600747|12544155|000021956

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

1 Ответ

0 голосов
/ 08 апреля 2019

IIUC, вы хотите отобразить группу шаблонов в различные операции.Если это так, вы можете использовать awk со следующим примером кода:

$ cat t18.awk
# here we set up "|" and optional surrounding spaces as FS, so no need 
# to run sed to remove extra spaces
# OFS="|", header will be feed from the command line with -v option
BEGIN{ FS = " *\\| *"; OFS = "|"; }

# use if/else to find operation based on pattern in your "grep" commands
# I just added three, you need to add rest of them to the function
function find_operation() {
    if (/001.*ALTA/) return "ALTA"
    else if (/(046|008).*BAJA FINAL/) return "ELIMINAR"
    else if (/008.*BAJA APC|046.*BAJA MIGRACION/) return "BAJA"
    else return ""
}

# run the function(), if operation is not EMPTY, print it
operation = find_operation() {
    print header, operation, $14, $15, $8, $4
}

Я запускаю вышеупомянутое на моем MacOS, и это выдает следующее:

$ header="ATIS|testArnold2.txt|data|atok"
$ awk -v header="$header" -f t18.awk file.txt 
ATIS|testArnold2.txt|data|atok|ALTA|DNI|02842909|73479107|000018995
ATIS|testArnold2.txt|data|atok|ALTA|DNI|02842909|73479107|000021932
ATIS|testArnold2.txt|data|atok|ALTA|DNI|02842909|73479107|000021932
ATIS|testArnold2.txt|data|atok|ALTA|DNI|29600747|12544155|000018995
ATIS|testArnold2.txt|data|atok|ALTA|DNI|29600747|12544155|000021148
ATIS|testArnold2.txt|data|atok|BAJA|DNI|29600747|12544155|000021251
ATIS|testArnold2.txt|data|atok|BAJA|DNI|29600747|12544155|000021956

Конечно, вы должны изменитьзаголовок того, что вы определили в своем коде, просто удалите завершающий канал |.

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