Shell: printf alignment is inconsistent for non-ASCII text - shell

I'm writing a makefile that creates directories and displays a special message if the newly created dir is empty. This is done with a macro:
CREADIRVACIO = #printf "Creando directorio %-50s ¡DIRECTORIO VACÍO!\n"
With this macro, I call the message with its appropirate dir name and it's printed:
$(CREADIRVACIO) "Fundamentos de programación"
#mkdir $(FP_OUT)
My problem here is that the output part that says ¡DIRECTORIO VACÍO! should be aligned in the same column. It's not:
➜ make
==========================
# COMENZANDO COMPILACIÓN #
==========================
Eliminando compilación anterior
Creando raíz de archivos compilados
Creando directorio 1º 1er cuatrimestre
Creando directorio Álgebra lineal y estructuras matemáticas ¡DIRECTORIO VACÍO!
Creando directorio Cálculo ¡DIRECTORIO VACÍO!
Creando directorio Fundamentos físicos y tecnológicos ¡DIRECTORIO VACÍO!
Creando directorio Fundamentos de programación ¡DIRECTORIO VACÍO!
Creando directorio Fundamentos del software ¡DIRECTORIO VACÍO!
Creando directorio 1º 2º cuatrimestre
Creando directorio Estadística ¡DIRECTORIO VACÍO!
Creando directorio Ingeniería, empresa y sociedad ¡DIRECTORIO VACÍO!
Creando directorio Lógica y métodos discretos ¡DIRECTORIO VACÍO!
Creando directorio Metodología de la programación ¡DIRECTORIO VACÍO!
Creando directorio Tecnología y organización de los computadores ¡DIRECTORIO VACÍO!
Creando directorio 2º 1er cuatrimestre
Creando directorio Estructura de computadores ¡DIRECTORIO VACÍO!
Creando directorio Estructura de datos ¡DIRECTORIO VACÍO!
Creando directorio Programación y diseño orientado a objetos ¡DIRECTORIO VACÍO!
Creando directorio Sistemas concurrentes y distribuidos ¡DIRECTORIO VACÍO!
Creando directorio Sistemas operativos ¡DIRECTORIO VACÍO!
Creando directorio 2º 2º cuatrimestre
Creando directorio Arquitectura de computadores ¡DIRECTORIO VACÍO!
Creando directorio Algorítmica ¡DIRECTORIO VACÍO!
Creando directorio Fundamentos de bases de datos ¡DIRECTORIO VACÍO!
Creando directorio Fundamentos de ingeniería del software ¡DIRECTORIO VACÍO!
Creando directorio Inteligencia artificial ¡DIRECTORIO VACÍO!
Creando directorio 3º 1er cuatrimestre
Creando directorio Diseño y desarrollo de sistemas de información ¡DIRECTORIO VACÍO!
Creando directorio Fundamentos de redes ¡DIRECTORIO VACÍO!
Creando directorio Informática gráfica ¡DIRECTORIO VACÍO!
Creando directorio Ingeniería de servidores ¡DIRECTORIO VACÍO!
Creando directorio Modelos de computación ¡DIRECTORIO VACÍO!
What am I doing wrong?
Thanks!

Related

Reformating data with awk command depending on a if condition

i have a script that reformated the content of a source file in a target file.
It does it for every files in a directory.
Here is a source file exemple :
TABLE;APGFPOLI;
Contrat;CHAR(16);Numéro du contrat
Libelle;CHAR(30);Libellé du contrat
DtCreation;CHAR(8);Date de création
DtMaj;CHAR(8);Date de dernière MAJ
DtEffet;CHAR(8);Date d'effet adhésion
MotifAdh;CHAR(2);Motif d'adhésion
DtRadiation;CHAR(8);Date de radiation
DtEnrRad;CHAR(8);Date enregistrement radiat
MotifRad;CHAR(2);Motif de radiation
MtPrime;Numérique 8.2;Montant prime d'origine
DtEffetSusp;CHAR(8);Date d'effet de suspension
DtFinSusp;CHAR(8);Date de fin de suspension
MotifSusp;CHAR(2);Motif de suspension
DestBord;CHAR(1);Destinataire du bordereau
CdDest;CHAR(5);Code du destinataire
NivRupBord;CHAR(1);Niveau rupture bordereau
BordCETIP;CHAR(1);Bordereau CTIP
EnvBordNom;CHAR(1);Envoi bordereau nominatif
Indice;CHAR(2);Indice appliqué
Echeance;CHAR(2);Echéance de l'indice (MM)
Effectif;CHAR(5);Effectif
CdRegr;CHAR(3);Code regroupement 1
CdGroupe;CHAR(3);Code regroupement 2
Periodicite;CHAR(1);Périodicité
Terme;CHAR(1);Terme
Produit;CHAR(6);Code produit affecté
Inspecteur;CHAR(5);Inspecteur
CleInsp;CHAR(1);Clé inspecteur
Filler;CHAR(6);Filler
And here is the target file generated by the shell:
01 APGFPOLI.
* Numéro du contrat.
05 Contrat PIC X(16).
* Libellé du contrat.
05 Libelle PIC X(30).
* Date de création.
05 DtCreation PIC X(8).
* Date de dernière MAJ.
05 DtMaj PIC X(8).
* Date d'effet adhésion.
05 DtEffet PIC X(8).
* Motif d'adhésion.
05 MotifAdh PIC X(2).
* Date de radiation.
05 DtRadiation PIC X(8).
* Date enregistrement radiat.
05 DtEnrRad PIC X(8).
* Motif de radiation.
05 MotifRad PIC X(2).
* Montant prime d'origine.
05 MtPrime Numérique 8.2.
* Date d'effet de suspension.
05 DtEffetSusp PIC X(8).
* Date de fin de suspension.
05 DtFinSusp PIC X(8).
* Motif de suspension.
05 MotifSusp PIC X(2).
* Destinataire du bordereau.
05 DestBord PIC X(1).
* Code du destinataire.
05 CdDest PIC X(5).
* Niveau rupture bordereau.
05 NivRupBord PIC X(1).
* Bordereau CTIP.
05 BordCETIP PIC X(1).
* Envoi bordereau nominatif.
05 EnvBordNom PIC X(1).
* Indice appliqué.
05 Indice PIC X(2).
* Echéance de l'indice (MM).
05 Echeance PIC X(2).
* Effectif.
05 Effectif PIC X(5).
* Code regroupement 1.
05 CdRegr PIC X(3).
* Code regroupement 2.
05 CdGroupe PIC X(3).
* Périodicité.
05 Periodicite PIC X(1).
* Terme.
05 Terme PIC X(1).
* Code produit affecté.
05 Produit PIC X(6).
* Inspecteur.
05 Inspecteur PIC X(5).
* Clé inspecteur.
05 CleInsp PIC X(1).
* Filler.
05 Filler PIC X(6).
What i am trying to do is change that line :
MtPrime;Numérique 8.2;Montant prime d'origine
Like this :
05 MtPrime PIC 9(8).v9(2).
As you can see it changed "Numérique X.Y" by PIC 9(X).v9(Y).
The condition is that if i have only one number "X" after "Numerique" i need to reformat it like this :
"PIC 9(X)"
BUT if i have a number "X" DOT another number "Y" i need to print it like this :
"PIC 9(X).v9(Y)"
Using awk command and being a full beginner i have no clue how can i achieve this.
Here is my shell :
#!/bin/bash
SOURCE_DIRECTORY="/home/yha/AG2R/SOURCE/*"
TARGET_DIRECTORY="/home/yha/AG2R/COPY/"
for f in $SOURCE_DIRECTORY
do
b=$(basename "$f")
echo "Processing $f file..";
awk -F ';' '$1=="TABLE" && $3=="" {printf "01 %s.\n\n", $2; next} {sub(/CHAR/,"PIC X", $2);printf " * %s.\n\n 05 %s %s.\n\n", $3, $1, $2;}' "$f" > "$TARGET_DIRECTORY/$b.cpy"
done
For the awk part, you might use a regex to check for the word followed by a digits and an optional part with a dot and digits.
^Numérique [0-9]+(\.[0-9]+)?$
If there is a match, you can split on a space or dot. Then you can assemble the string to print by checking if there is a 3rd entry in the array with splitted values and start the string with the value of the 2nd value.
The data
$cat file
TABLE;APGFPOLI;
DtEnrRad;CHAR(8);Date enregistrement radiat
MotifRad;CHAR(2);Motif de radiation
MtPrime;Numérique 8.2;Montant prime d'origine
MtPrime;Numérique 5;Montant prime d'origine
DtEffetSusp;CHAR(8);Date d'effet de suspension
awk script
awk -F ';' '
$1=="TABLE" && $3=="" {
printf "01 %s.\n\n", $2;
next
}
{
result = $2
if ($2 ~ /^Numérique [0-9]+(\.[0-9]+)?$/) {
nr=split($2,a,"[ .]")
result = "PIC 9(" a[2] ")"
if (nr == 3) {
result = result ".v9(" a[3] ")"
}
}
sub(/CHAR/,"PIC X", result);
printf " * %s.\n\n 05 %s %s.\n\n", $3, $1, result;
}' file
Output
01 APGFPOLI.
* Date enregistrement radiat.
05 DtEnrRad PIC X(8).
* Motif de radiation.
05 MotifRad PIC X(2).
* Montant prime d'origine.
05 MtPrime PIC 9(8).v9(2).
* Montant prime d'origine.
05 MtPrime PIC 9(5).
* Date d'effet de suspension.
05 DtEffetSusp PIC X(8).

joining same name of content and summing the value of each one together using batch script

Years ago #Mofi helped me creating an amazing .bat script to sum values of many contents, also joining it names and making a total sum of them.
Please check the old answer about it, focusing at the Mofi´s answer.
How to ignore first and third data column on sorting and summing the text using batch file?
But I noticed an issue.
Values of less than $ 1,00 doesn't sum right.
Values of greater than $ 99.999,99 doesn't sum right or are output wrong sometimes.
One example:
Using this .txt file to be reformatted:
04 VERO BANRICOMPRAS A PRAZO 651326 885,92
VERO BANRICOMPRAS A VISTA 038937 470,90
VERO CARTAO CREDITO 100810 2.126,17
VERO CARTAO CREDITO 100811 1.354,05
VERO CARTAO CREDITO 100812 148,91
CIELO S/A CARTAO CREDITO 084036 45,75
CIELO S/A CARTAO CREDITO 084037 24,18
CIELO S/A CARTAO CREDITO 084038 108,34
REDECARD S.A CARTAO CREDITO 154346 163,81
VERO CARTAO DEBITO 214591 1.338,66
VERO CARTAO DEBITO 214592 556,16
VERO CARTAO DEBITO 214593 113,96
CIELO S/A CARTAO DEBITO 186651 491,87
CIELO S/A CARTAO DEBITO 186652 678,53
05 VERO BANRICOMPRAS A PRAZO 976373 504,55
VERO BANRICOMPRAS A VISTA 440325 397,56
VERO CARTAO CREDITO 496411 725,69
VERO CARTAO CREDITO 496412 545,53
CIELO S/A CARTAO CREDITO 488259 135,32
CIELO S/A CARTAO CREDITO 488260 33,72
REDECARD S.A CARTAO CREDITO 519807 22,81
VERO CARTAO DEBITO 555957 619,03
VERO CARTAO DEBITO 555958 452,29
CIELO S/A CARTAO DEBITO 542472 946,15
06 VERO BANRICOMPRAS A PRAZO 419616 257,17
VERO BANRICOMPRAS A VISTA 771632 379,49
VERO CARTAO CREDITO 818228 1.317,35
VERO CARTAO CREDITO 818229 708,32
VERO CARTAO CREDITO 818230 84,28
CIELO S/A CARTAO CREDITO 809536 14,88
REDECARD S.A CARTAO CREDITO 846159 51,57
VERO CARTAO DEBITO 883969 229,31
VERO CARTAO DEBITO 883970 85,83
CIELO S/A CARTAO DEBITO 870136 49,18
CIELO S/A CARTAO DEBITO 870137 42,28
RESGATE AUTOMATICO 000000 6.200,00
07 VERO BANRICOMPRAS A PRAZO 742635 148,84
VERO BANRICOMPRAS A VISTA 135047 111,52
VERO CARTAO CREDITO 178947 867,82
VERO CARTAO CREDITO 178948 41,02
CIELO S/A CARTAO CREDITO 169813 133,68
CIELO S/A CARTAO CREDITO 169814 24,98
VERO CARTAO DEBITO 244107 596,02
VERO CARTAO DEBITO 244108 364,95
CIELO S/A CARTAO DEBITO 229583 651,76
08 VERO BANRICOMPRAS A PRAZO 085581 274,00
VERO BANRICOMPRAS A VISTA 489251 950,36
VERO CARTAO CREDITO 532717 601,15
VERO CARTAO CREDITO 532718 488,93
CIELO S/A CARTAO CREDITO 523033 69,76
CIELO S/A CARTAO CREDITO 523034 58,36
CIELO S/A CARTAO CREDITO 523035 34,30
REDECARD S.A CARTAO CREDITO 562700 185,53
VERO CARTAO DEBITO 603103 2.608,68
VERO CARTAO DEBITO 603104 1.124,42
CIELO S/A CARTAO DEBITO 588005 1.419,60
11 VERO BANRICOMPRAS A PRAZO 451443 770,43
VERO BANRICOMPRAS A VISTA 800736 1.377,51
VERO CARTAO CREDITO 859775 1.673,38
VERO CARTAO CREDITO 859776 836,50
VERO CARTAO CREDITO 859777 27,42
VERO CARTAO CREDITO 859778 39,24
CIELO S/A CARTAO CREDITO 844066 26,44
CIELO S/A CARTAO CREDITO 844067 45,37
CIELO S/A CARTAO CREDITO 844068 54,34
REDECARD S.A CARTAO CREDITO 910400 127,17
VERO CARTAO DEBITO 972748 3.560,31
VERO CARTAO DEBITO 972749 1.939,33
CIELO S/A CARTAO DEBITO 944629 175,81
CIELO S/A CARTAO DEBITO 944630 2.161,99
CIELO S/A CARTAO DEBITO 944631 58,72
CIELO S/A CARTAO DEBITO 944632 1.559,94
RESGATE AUTOMATICO 000000 15.500,00
12 VERO BANRICOMPRAS A PRAZO 742222 159,97
VERO BANRICOMPRAS A VISTA 190951 1.247,06
VERO CARTAO CREDITO 334660 669,75
VERO CARTAO CREDITO 334661 263,14
VERO CARTAO CREDITO 334662 99,13
CIELO S/A CARTAO CREDITO 325837 17,40
CIELO S/A CARTAO CREDITO 325838 161,58
REDECARD S.A CARTAO CREDITO 358417 106,89
VERO CARTAO DEBITO 394014 128,39
VERO CARTAO DEBITO 394015 349,08
CIELO S/A CARTAO DEBITO 381003 892,94
RESGATE AUTOMATICO 000000 6.900,00
DEVOLUCAO DOC. ELETRONICO 000060 3.949,49
13 VERO BANRICOMPRAS A PRAZO 147127 136,58
VERO BANRICOMPRAS A VISTA 564315 225,14
VERO CARTAO CREDITO 917004 656,04
VERO CARTAO CREDITO 917005 84,70
VERO CARTAO CREDITO 917006 103,07
CIELO S/A CARTAO CREDITO 907873 190,28
CIELO S/A CARTAO CREDITO 907874 65,24
REDECARD S.A CARTAO CREDITO 945528 155,34
VERO CARTAO DEBITO 981014 488,95
VERO CARTAO DEBITO 981015 112,82
14 VERO BANRICOMPRAS A PRAZO 534959 19,21
VERO BANRICOMPRAS A VISTA 123609 343,33
VERO CARTAO CREDITO 174070 225,84
VERO CARTAO CREDITO 174071 237,41
CIELO S/A CARTAO CREDITO 164650 40,68
CIELO S/A CARTAO CREDITO 164651 26,54
VERO CARTAO DEBITO 237408 608,63
VERO CARTAO DEBITO 237409 1.061,97
CIELO S/A CARTAO DEBITO 224104 232,16
15 VERO BANRICOMPRAS A PRAZO 091718 212,73
VERO BANRICOMPRAS A VISTA 412318 528,61
VERO CARTAO CREDITO 464462 1.255,15
VERO CARTAO CREDITO 464463 82,57
VERO CARTAO CREDITO 464464 72,84
CIELO S/A CARTAO CREDITO 454334 25,47
CIELO S/A CARTAO CREDITO 454335 204,90
CIELO S/A CARTAO CREDITO 454336 218,38
REDECARD S.A CARTAO CREDITO 495065 81,70
VERO CARTAO DEBITO 532669 340,94
VERO CARTAO DEBITO 532670 63,15
CIELO S/A CARTAO DEBITO 518884 699,42
18 VERO BANRICOMPRAS A PRAZO 383614 691,40
VERO BANRICOMPRAS A VISTA 719756 955,41
VERO CARTAO CREDITO 766119 3.335,37
VERO CARTAO CREDITO 766120 1.460,17
VERO CARTAO CREDITO 766121 637,74
CIELO S/A CARTAO CREDITO 749384 185,38
REDECARD S.A CARTAO CREDITO 818055 341,85
VERO CARTAO DEBITO 876849 1.686,83
VERO CARTAO DEBITO 876850 623,29
VERO CARTAO DEBITO 876851 24,33
CIELO S/A CARTAO DEBITO 852038 157,38
CIELO S/A CARTAO DEBITO 852039 892,36
CIELO S/A CARTAO DEBITO 852040 818,90
19 VERO BANRICOMPRAS A PRAZO 660866 118,53
VERO BANRICOMPRAS A VISTA 080453 244,18
VERO CARTAO CREDITO 126719 533,66
VERO CARTAO CREDITO 126720 95,94
VERO CARTAO CREDITO 126721 47,87
CIELO S/A CARTAO CREDITO 118299 46,64
CIELO S/A CARTAO CREDITO 118300 137,53
REDECARD S.A CARTAO CREDITO 149953 27,27
VERO CARTAO DEBITO 184851 1.325,03
VERO CARTAO DEBITO 184852 511,96
CIELO S/A CARTAO DEBITO 171809 437,77
20 VERO BANRICOMPRAS A PRAZO 044755 415,29
VERO BANRICOMPRAS A VISTA 349028 493,91
VERO CARTAO CREDITO 403626 673,75
VERO CARTAO CREDITO 403627 342,59
VERO CARTAO CREDITO 403628 58,28
REDECARD S.A CARTAO CREDITO 433775 67,90
REDECARD S.A CARTAO CREDITO 433776 67,61
VERO CARTAO DEBITO 472002 297,51
VERO CARTAO DEBITO 472003 131,56
RESGATE AUTOMATICO 000000 9.700,00
21 VERO BANRICOMPRAS A PRAZO 319063 305,54
VERO BANRICOMPRAS A VISTA 679182 473,10
VERO CARTAO CREDITO 724092 594,46
VERO CARTAO CREDITO 724093 290,86
CIELO S/A CARTAO CREDITO 716700 133,04
CIELO S/A CARTAO CREDITO 716701 244,63
REDECARD S.A CARTAO CREDITO 744273 109,34
VERO CARTAO DEBITO 779495 461,80
VERO CARTAO DEBITO 779496 61,27
CIELO S/A CARTAO DEBITO 765528 1.369,41
22 VERO BANRICOMPRAS A PRAZO 625121 272,86
VERO BANRICOMPRAS A VISTA 947266 173,69
VERO CARTAO CREDITO 049605 794,90
VERO CARTAO CREDITO 049606 181,81
VERO CARTAO CREDITO 049607 123,49
CIELO S/A CARTAO CREDITO 040363 115,22
CIELO S/A CARTAO CREDITO 040364 21,09
CIELO S/A CARTAO CREDITO 040365 116,42
REDECARD S.A CARTAO CREDITO 079047 156,19
VERO CARTAO DEBITO 114585 404,29
VERO CARTAO DEBITO 114586 199,87
CIELO S/A CARTAO DEBITO 101926 262,24
25 VERO BANRICOMPRAS A PRAZO 898216 619,60
VERO BANRICOMPRAS A VISTA 263855 333,14
VERO CARTAO CREDITO 656240 2.182,05
VERO CARTAO CREDITO 656241 1.153,70
CIELO S/A CARTAO CREDITO 641077 41,86
CIELO S/A CARTAO CREDITO 641078 93,03
REDECARD S.A CARTAO CREDITO 705335 156,27
VERO CARTAO DEBITO 761345 1.229,09
VERO CARTAO DEBITO 761346 307,53
CIELO S/A CARTAO DEBITO 737468 290,03
CIELO S/A CARTAO DEBITO 737469 412,93
RESGATE AUTOMATICO 000000 74.100,00
27 VERO BANRICOMPRAS A PRAZO 916537 254,76
VERO BANRICOMPRAS A VISTA 463886 910,60
VERO CARTAO CREDITO 027887 801,29
VERO CARTAO CREDITO 027888 479,59
VERO CARTAO CREDITO 027889 41,91
VERO CARTAO CREDITO 224868 267,26
VERO CARTAO CREDITO 224869 161,01
VERO CARTAO CREDITO 224870 144,73
CIELO S/A CARTAO CREDITO 019299 42,74
CIELO S/A CARTAO CREDITO 019300 72,49
CIELO S/A CARTAO CREDITO 217578 141,70
REDECARD S.A CARTAO CREDITO 055906 22,87
REDECARD S.A CARTAO CREDITO 244646 49,75
VERO CARTAO DEBITO 279344 458,92
VERO CARTAO DEBITO 279345 393,74
CIELO S/A CARTAO DEBITO 266081 380,41
CIELO S/A CARTAO DEBITO 266082 848,21
28 VERO BANRICOMPRAS A PRAZO 427354 332,90
VERO BANRICOMPRAS A VISTA 269379 232,29
VERO CARTAO CREDITO 314994 912,53
VERO CARTAO CREDITO 314995 536,39
CIELO S/A CARTAO CREDITO 305504 33,87
CIELO S/A CARTAO CREDITO 305505 56,26
REDECARD S.A CARTAO CREDITO 344054 89,10
VERO CARTAO DEBITO 381678 810,07
VERO CARTAO DEBITO 381679 463,54
CIELO S/A CARTAO DEBITO 367679 285,99
29 VERO BANRICOMPRAS A PRAZO 228273 139,72
VERO BANRICOMPRAS A VISTA 637529 499,77
VERO CARTAO CREDITO 678028 831,50
VERO CARTAO CREDITO 678029 318,86
CIELO S/A CARTAO CREDITO 668143 38,70
REDECARD S.A CARTAO CREDITO 708785 29,82
VERO CARTAO DEBITO 746619 1.159,92
CIELO S/A CARTAO DEBITO 732531 839,64
The result of one content is: RESGATE AUTOMATICO 12.400,00
But in fact the right output would be: RESGATE AUTOMATICO 112.400,00
It's missing the first digit.
This script is too complex for my level of knowing, but after trying read it, I guess the problem is at this part of the script:
if not "%DataName:~2,1%" == " " goto CheckName
if "%DataName:~0,1%" == ";" goto CheckName
for /F "delims=01234567890" %%A in ("%DataName:~0,2%") do goto CheckName
set "DataName=%DataName:~3%"
On my understanding (can be wrong as I told before) the 000000 in the middle column is making the script understand to remove the first character (12.400 instead 112.400).
Someone can explain me better to understand how to fix it?
Here is the enhanced the batch script fixing both issues.
#echo off
setlocal EnableExtensions DisableDelayedExpansion
set "DataCount=0"
set "MaxNameLength=19"
set "TempFile1=%TEMP%\Output.tmp"
set "TempFile2=%TEMP%\Sorted.tmp"
set "OutputFile=Output.txt"
"%ProgramFiles(x86)%\CoolUtils\Total PDF Converter\PDFConverter.exe" "%UserProfile%\Desktop\teste.oxps" "%UserProfile%\Desktop\teste.txt"
del /F "%UserProfile%\Desktop\teste.pdf"
%SystemRoot%\System32\findstr.exe /V /R /C:"http" /C:"Banrisul" /C:"Sac" /C:":" /C:"-" /C:"SAC" /C:"OUVIDORIA" /C:"B A N R I S U L" /C:"+" "%UserProfile%\Desktop\teste.txt" >"%TempFile1%"
if not exist "%TempFile1%" goto EndBatch
rem Process each line in the output file line by line with leading
rem spaces and tabs already removed by FOR, but no other characters.
for /F usebackq^ tokens^=*^ eol^= %%I in ("%TempFile1%") do (
set "DataRow=%%~I"
call :ProcessLine
)
goto FormatOutput
:ProcessLine
rem Remove all double quotes within the data row.
set "DataRow=%DataRow:"=%"
rem Remove all exclamation marks within the data row.
set "DataRow=%DataRow:!=%"
rem Remove all horizontal tabs within the data row by spaces.
set "DataRow=%DataRow: = %"
rem Replace all $ by the string #DollarSign# within the data row.
set "DataRow=%DataRow:$=#DollarSign#%"
rem Replace two spaces in series by a dollar sign.
set "DataRow=%DataRow: =$%"
rem Replace all occurrences of dollar sign plus space by dollar sign.
set "DataRow=%DataRow:$ =$%"
rem Split up the data row using dollar sign as delimiter which can result
rem in four or just three tokenized substrings depending on existence of
rem 01, 02, ... in first data column. Of interest is the name string in
rem first or second data column and the value string in third or fourth
rem data column.
for /F tokens^=1-4^ delims^=$^ eol^= %%J in ("%DataRow%") do (
if "%%M" == "" (
set "DataName=%%~J"
set "DataValue=%%L"
) else (
set "DataName=%%~K"
set "DataValue=%%M"
)
)
rem It is safe now to replace the string #DollarSign# back to dollar sign.
set "DataName=%DataName:#DollarSign#=$%"
rem If the first 2 characters of data name are two digits and third
rem character is a space then remove those 3 characters from data name.
if not "%DataName:~2,1%" == " " goto CheckName
if "%DataName:~0,1%" == ";" goto CheckName
for /F "delims=01234567890" %%J in ("%DataName:~0,2%") do goto CheckName
set "DataName=%DataName:~3%"
rem Data names not containing one of the following four strings
rem should be at end of the list and not included in the total sum.
:CheckName
if not "%DataName:DEBITO=%" == "%DataName%" goto ReformatValue
if not "%DataName:CREDITO=%" == "%DataName%" goto ReformatValue
if not "%DataName:A VISTA=%" == "%DataName%" goto ReformatValue
if not "%DataName:A PRAZO=%" == "%DataName%" goto ReformatValue
set "DataName=z_%DataName%"
rem Floating point arithmetic is not supported by Windows command processor,
rem just signed 32-bit integer arithmetic with values in range -2147483648
rem to 2147483647. Therefore remove all dots and commas from data value.
:ReformatValue
set "DataValue=%DataValue:.=%"
set "DataValue=%DataValue:,=%"
for /F "tokens=* delims=0" %%J in ("%DataValue%") do set "DataValue=%%J"
if not defined DataValue set "DataValue=0"
rem Add the data value as integer to total sum. There is no special
rem overflow handling implemented yet in case of total sum exceeds
rem the maximum 32-bit positive signed integer value 2147483647.
if not "%DataName:~0,2%" == "z_" set /A "#TotalSum+=DataValue"
rem Find out if a data value of current data name is already in list
rem of environment variables and in this case just add the data value
rem to the existing sum for data data name and exit the subroutine.
for /F "tokens=1* delims==" %%J in ('set $\ 2^>nul') do if /I "%%K" == "%DataName%" set /A "#%%~nJ+=DataValue" & goto :EOF
rem This is a new data name with its first data value. So set
rem the appropriate environment variables for name and value.
set /A DataCount+=1
set "$\%DataCount%=%DataName%"
set "#%DataCount%=%DataValue%"
rem For a later aligned output find out the length of the data name and
rem remember its length if being greater than longest data name up to now.
rem z_ added at beginning of some data names must be always ignored for
rem length of data name.
set "NameLength=1"
:GetNameLength
set "DataName=%DataName:~1%"
if not "%DataName%" == "" set /A "NameLength+=1" & goto GetNameLength
if "%DataName:~0,2%" == "z_" set /A NameLength-=2
if %NameLength% GTR %MaxNameLength% set "MaxNameLength=%NameLength%"
rem Exit the subroutine.
goto :EOF
:FormatOutput
rem Add 3 to maximum name length to have always at least 3 spaces
rem between longest data name and the sum of the data values.
set /A MaxNameLength+=3
setlocal EnableDelayedExpansion
rem Build a string consisting of spaces according to maximum name length.
set "SpacesName="
for /L %%I in (1,1,%MaxNameLength%) do set "SpacesName=!SpacesName! "
rem Find out the maximum value which is usually the total sum, but
rem could be also a different value like sum of RESGATE AUTOMATICO.
set "MaximumValue=%#TotalSum%"
setlocal EnableDelayedExpansion
for /F "tokens=2 delims==" %%I in ('set #') do if %%I GTR !MaximumValue! set "MaximumValue=%%I"
endlocal & set "MaximumValue=%MaximumValue%"
rem Format value of maximum value.
call :FormatNumber %MaximumValue%
rem For a later aligned output find out the length of the maximum value.
set "ValueLength=1"
:GetValueLength
set "DataValue=%DataValue:~1%"
if not "%DataValue%" == "" set /A "ValueLength+=1" & goto GetValueLength
rem Build a string consisting of spaces according to maximum name length.
set "SpacesValue="
for /L %%I in (1,1,%ValueLength%) do set "SpacesValue=!SpacesValue! "
rem Output the data names with appropriate number of aligning spaces
rem and the data sum for each data name formatted and with aligning
rem spaces into the output file.
set /A ExtraNameLength=MaxNameLength+2
del "%TempFile1%" 2>nul
(for /F "tokens=1* delims==" %%I in ('set $\ 2^>nul') do (
set "DataName=%%J%SpacesName%"
if not "!DataName:~0,2!" == "z_" (
set "DataName=!DataName:~0,%MaxNameLength%!"
) else set "DataName=!DataName:~0,%ExtraNameLength%!"
call :FormatNumber !#%%~nI!
set "DataValue=%SpacesValue%!DataValue!"
set "DataValue=!DataValue:~-%ValueLength%!"
echo !DataName!!DataValue!
))>>"%TempFile1%"
rem Sort the lines in output file according to name.
%SystemRoot%\System32\sort.exe "%TempFile1%" /O "%TempFile2%"
del "%TempFile1%" 2>nul
rem 16 is the length of string CARDS OF MONTH with a space on both sides.
set /A LineLength=MaxNameLength+ValueLength
set /A HeadLength=(LineLength-16) / 2
rem Build the heading for the output file with centered CARDS OF MONTH
rem and create the output file with this heading as first line.
set "HyphensHead="
for /L %%I in (1,1,%HeadLength%) do set "HyphensHead=!HyphensHead!-"
set "Heading=%HyphensHead% CARDS OF MONTH %HyphensHead%"
set /A HeadLength=HeadLength*2 + 16
if not %HeadLength% == %LineLength% set "Heading=%Heading%-"
echo %Heading%>"%OutputFile%"
set "TotalSumWrite=1"
for /F usebackq^ tokens^=*^ eol^= %%I in ("%TempFile2%") do (
set "DataRow=%%I"
if defined TotalSumWrite (
if not "!DataRow:~0,2!" == "z_" (
echo !DataRow!>>"%OutputFile%"
) else (
rem Append the total summary to the output file.
set "TotalSumWrite="
>>"%OutputFile%" echo %SpacesName: =-%%SpacesValue: =-%
set "DataName=TOTAL OF ALL:%SpacesName%"
set "DataName=!DataName:~0,%MaxNameLength%!"
call :FormatNumber %#TotalSum%
set "DataValue=%SpacesValue%!DataValue!"
set "DataValue=!DataValue:~-%ValueLength%!"
>>"%OutputFile%" echo !DataName!!DataValue!
>>"%OutputFile%" echo %SpacesName: =-%%SpacesValue: =-%
>>"%OutputFile%" echo !DataRow:~2!
)
) else echo !DataRow:~2!>>"%OutputFile%"
)
if defined TotalSumWrite (
>>"%OutputFile%" echo %SpacesName: =-%%SpacesValue: =-%
set "DataName=TOTAL OF ALL:%SpacesName%"
set "DataName=!DataName:~0,%MaxNameLength%!"
call :FormatNumber %#TotalSum%
set "DataValue=%SpacesValue%!DataValue!"
set "DataValue=!DataValue:~-%ValueLength%!"
>>"%OutputFile%" echo !DataName!!DataValue!
)
del "%TempFile2%" 2>nul
endlocal
goto EndBatch
rem The subroutine below reformats 0 to 99 to 0,00 to 0,99 and inserts
rem dots on larger values after a series of 3 digits left to the comma.
:FormatNumber
set "DataValue=%1"
if "%DataValue:~1,1%" == "" set "DataValue=0%DataValue%"
if "%DataValue:~2,1%" == "" set "DataValue=0%DataValue%"
set "DataValue=%DataValue:~0,-2%,%DataValue:~-2%"
if not "%DataValue:~6,1%" == "" set "DataValue=%DataValue:~0,-6%.%DataValue:~-6%"
if not "%DataValue:~10,1%" == "" set "DataValue=%DataValue:~0,-10%.%DataValue:~-10%"
goto :EOF
:EndBatch
endlocal
The following two lines are inserted to fix the first issue with values in range 0,08 to 0,99 being wrong interpreted as invalid or valid octal numbers instead of decimal numbers after removing the comma because of leading 0.
for /F "tokens=* delims=0" %%J in ("%DataValue%") do set "DataValue=%%J"
if not defined DataValue set "DataValue=0"
All values in range 0,08 to 0,99 with digit 8 or 9 in value were interpreted as invalid octal numbers resulting in using value 0 in arithmetic expression calculating the sums.
These two lines remove all leading 0 from a data value and if the data value is not defined anymore after the loop because of value was 0,00, the environment variable DataValue is redefined with value 0.
I applied this fix also to code posted at How to ignore first and third data column on sorting and summing the text using batch file?
The second issue with wrong output sum of RESGATE AUTOMATICO was caused by:
rem Format value of total sum.
call :FormatNumber %#TotalSum%
rem For a later aligned output find out the length of the total
rem sum which is expected to be the greatest value in output.
The expectation that the total sum is always the greatest value in output is not fulfilled by the provided data example because of total sum is 98.847,01 while sum of RESGATE AUTOMATICO is 112.400,00 which has more characters.
This issue is fixed with:
rem Find out the maximum value which is usually the total sum, but
rem could be also a different value like sum of RESGATE AUTOMATICO.
set "MaximumValue=%#TotalSum%"
setlocal EnableDelayedExpansion
for /F "tokens=2 delims==" %%I in ('set #') do if %%I GTR !MaximumValue! set "MaximumValue=%%I"
endlocal & set "MaximumValue=%MaximumValue%"
rem Format value of maximum value.
call :FormatNumber %MaximumValue%
rem For a later aligned output find out the length of the maximum value.
There are made some other small improvements which do not affect the output.

Makefile error message: make[1]: *** [aclocal.m4] Fehler 127

I try to use the "make"-command, but it shows the following error message:
cd .. && make am--refresh
make[1]: Verzeichnis »/media/user/8d6aed42-01a5-4f03-840b-ed57a8d077a3/ubuntu_temp_packet/empathy-3.8.6« wird betreten
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /media/user/8d6aed42-01a5-4f03-840b-ed57a8d077a3/ubuntu/temp_packet/empathy-3.8.6/missing aclocal-1.13 -I m4
/media/user/8d6aed42-01a5-4f03-840b-ed57a8d077a3/ubuntu/temp_packet/empathy-3.8.6/missing: Zeile 81: aclocal-1.13: Befehl nicht gefunden
WARNING: 'aclocal-1.13' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make[1]: *** [aclocal.m4] Fehler 127
make[1]: Verzeichnis »/media/user/8d6aed42-01a5-4f03-840b-ed57a8d077a3/ubuntu/temp_packet/empathy-3.8.6« wird verlassen
make: *** [../aclocal.m4] Fehler 2
After a google search I recognized that a lot of people faced the same problem, but none of them really solved it.
If I run the make in debug mode I get the following output:
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
Dies ist Freie Software; siehe die Programmquellen für Vervielfältigungsbedingungen.
Es gibt KEINE Gewährleistung; nicht einmal für VERMARKTUNG oder NUTZBARKEIT FÜR EINEN
BESONDEREN ZWECK.
Dieses Programm wurde erstellt für i686-pc-linux-gnu
»make«-Steuerdateien werden gelesen …
»make«-Steuerdatei »Makefile« wird gelesen...
»make«-Steuerdateien werden aktualisiert …
Betrachte Target-Datei »Makefile«.
Betrachte Target-Datei »Makefile.in«.
Betrachte Target-Datei »Makefile.am«.
Suche nach einer impliziten Regel für »Makefile.am«.
Versuche Muster-Regel mit Ersetzung »Makefile.am«.
Versuche implizite Voraussetzung »Makefile.am,v«.
Versuche Muster-Regel mit Ersetzung »Makefile.am«.
Versuche implizite Voraussetzung »RCS/Makefile.am,v«.
Versuche Muster-Regel mit Ersetzung »Makefile.am«.
Versuche implizite Voraussetzung »RCS/Makefile.am«.
Versuche Muster-Regel mit Ersetzung »Makefile.am«.
Versuche implizite Voraussetzung »s.Makefile.am«.
Versuche Muster-Regel mit Ersetzung »Makefile.am«.
Versuche implizite Voraussetzung »SCCS/s.Makefile.am«.
Keine implizite Regel für »Makefile.am« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »Makefile.am«.
Es ist nicht notwendig, das Target »Makefile.am« neu zu erzeugen.
Betrachte Target-Datei »../m4/as-compiler-flag.m4«.
Suche nach einer impliziten Regel für »../m4/as-compiler-flag.m4«.
Versuche Muster-Regel mit Ersetzung »as-compiler-flag.m4«.
Versuche implizite Voraussetzung »../m4/as-compiler-flag.m4,v«.
Versuche Muster-Regel mit Ersetzung »as-compiler-flag.m4«.
Versuche implizite Voraussetzung »../m4/RCS/as-compiler-flag.m4,v«.
Versuche Muster-Regel mit Ersetzung »as-compiler-flag.m4«.
Versuche implizite Voraussetzung »../m4/RCS/as-compiler-flag.m4«.
Versuche Muster-Regel mit Ersetzung »as-compiler-flag.m4«.
Versuche implizite Voraussetzung »../m4/s.as-compiler-flag.m4«.
Versuche Muster-Regel mit Ersetzung »as-compiler-flag.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.as-compiler-flag.m4«.
Keine implizite Regel für »../m4/as-compiler-flag.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/as-compiler-flag.m4«.
Kein Befehl für »../m4/as-compiler-flag.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/as-compiler-flag.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/ax_config_dir.m4«.
Suche nach einer impliziten Regel für »../m4/ax_config_dir.m4«.
Versuche Muster-Regel mit Ersetzung »ax_config_dir.m4«.
Versuche implizite Voraussetzung »../m4/ax_config_dir.m4,v«.
Versuche Muster-Regel mit Ersetzung »ax_config_dir.m4«.
Versuche implizite Voraussetzung »../m4/RCS/ax_config_dir.m4,v«.
Versuche Muster-Regel mit Ersetzung »ax_config_dir.m4«.
Versuche implizite Voraussetzung »../m4/RCS/ax_config_dir.m4«.
Versuche Muster-Regel mit Ersetzung »ax_config_dir.m4«.
Versuche implizite Voraussetzung »../m4/s.ax_config_dir.m4«.
Versuche Muster-Regel mit Ersetzung »ax_config_dir.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.ax_config_dir.m4«.
Keine implizite Regel für »../m4/ax_config_dir.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/ax_config_dir.m4«.
Kein Befehl für »../m4/ax_config_dir.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/ax_config_dir.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/empathy-args.m4«.
Suche nach einer impliziten Regel für »../m4/empathy-args.m4«.
Versuche Muster-Regel mit Ersetzung »empathy-args.m4«.
Versuche implizite Voraussetzung »../m4/empathy-args.m4,v«.
Versuche Muster-Regel mit Ersetzung »empathy-args.m4«.
Versuche implizite Voraussetzung »../m4/RCS/empathy-args.m4,v«.
Versuche Muster-Regel mit Ersetzung »empathy-args.m4«.
Versuche implizite Voraussetzung »../m4/RCS/empathy-args.m4«.
Versuche Muster-Regel mit Ersetzung »empathy-args.m4«.
Versuche implizite Voraussetzung »../m4/s.empathy-args.m4«.
Versuche Muster-Regel mit Ersetzung »empathy-args.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.empathy-args.m4«.
Keine implizite Regel für »../m4/empathy-args.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/empathy-args.m4«.
Kein Befehl für »../m4/empathy-args.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/empathy-args.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/empathy-valgrind.m4«.
Suche nach einer impliziten Regel für »../m4/empathy-valgrind.m4«.
Versuche Muster-Regel mit Ersetzung »empathy-valgrind.m4«.
Versuche implizite Voraussetzung »../m4/empathy-valgrind.m4,v«.
Versuche Muster-Regel mit Ersetzung »empathy-valgrind.m4«.
Versuche implizite Voraussetzung »../m4/RCS/empathy-valgrind.m4,v«.
Versuche Muster-Regel mit Ersetzung »empathy-valgrind.m4«.
Versuche implizite Voraussetzung »../m4/RCS/empathy-valgrind.m4«.
Versuche Muster-Regel mit Ersetzung »empathy-valgrind.m4«.
Versuche implizite Voraussetzung »../m4/s.empathy-valgrind.m4«.
Versuche Muster-Regel mit Ersetzung »empathy-valgrind.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.empathy-valgrind.m4«.
Keine implizite Regel für »../m4/empathy-valgrind.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/empathy-valgrind.m4«.
Kein Befehl für »../m4/empathy-valgrind.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/empathy-valgrind.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/gsettings.m4«.
Suche nach einer impliziten Regel für »../m4/gsettings.m4«.
Versuche Muster-Regel mit Ersetzung »gsettings.m4«.
Versuche implizite Voraussetzung »../m4/gsettings.m4,v«.
Versuche Muster-Regel mit Ersetzung »gsettings.m4«.
Versuche implizite Voraussetzung »../m4/RCS/gsettings.m4,v«.
Versuche Muster-Regel mit Ersetzung »gsettings.m4«.
Versuche implizite Voraussetzung »../m4/RCS/gsettings.m4«.
Versuche Muster-Regel mit Ersetzung »gsettings.m4«.
Versuche implizite Voraussetzung »../m4/s.gsettings.m4«.
Versuche Muster-Regel mit Ersetzung »gsettings.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.gsettings.m4«.
Keine implizite Regel für »../m4/gsettings.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/gsettings.m4«.
Kein Befehl für »../m4/gsettings.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/gsettings.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/intltool.m4«.
Suche nach einer impliziten Regel für »../m4/intltool.m4«.
Versuche Muster-Regel mit Ersetzung »intltool.m4«.
Versuche implizite Voraussetzung »../m4/intltool.m4,v«.
Versuche Muster-Regel mit Ersetzung »intltool.m4«.
Versuche implizite Voraussetzung »../m4/RCS/intltool.m4,v«.
Versuche Muster-Regel mit Ersetzung »intltool.m4«.
Versuche implizite Voraussetzung »../m4/RCS/intltool.m4«.
Versuche Muster-Regel mit Ersetzung »intltool.m4«.
Versuche implizite Voraussetzung »../m4/s.intltool.m4«.
Versuche Muster-Regel mit Ersetzung »intltool.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.intltool.m4«.
Keine implizite Regel für »../m4/intltool.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/intltool.m4«.
Kein Befehl für »../m4/intltool.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/intltool.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/libtool.m4«.
Suche nach einer impliziten Regel für »../m4/libtool.m4«.
Versuche Muster-Regel mit Ersetzung »libtool.m4«.
Versuche implizite Voraussetzung »../m4/libtool.m4,v«.
Versuche Muster-Regel mit Ersetzung »libtool.m4«.
Versuche implizite Voraussetzung »../m4/RCS/libtool.m4,v«.
Versuche Muster-Regel mit Ersetzung »libtool.m4«.
Versuche implizite Voraussetzung »../m4/RCS/libtool.m4«.
Versuche Muster-Regel mit Ersetzung »libtool.m4«.
Versuche implizite Voraussetzung »../m4/s.libtool.m4«.
Versuche Muster-Regel mit Ersetzung »libtool.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.libtool.m4«.
Keine implizite Regel für »../m4/libtool.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/libtool.m4«.
Kein Befehl für »../m4/libtool.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/libtool.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/ltoptions.m4«.
Suche nach einer impliziten Regel für »../m4/ltoptions.m4«.
Versuche Muster-Regel mit Ersetzung »ltoptions.m4«.
Versuche implizite Voraussetzung »../m4/ltoptions.m4,v«.
Versuche Muster-Regel mit Ersetzung »ltoptions.m4«.
Versuche implizite Voraussetzung »../m4/RCS/ltoptions.m4,v«.
Versuche Muster-Regel mit Ersetzung »ltoptions.m4«.
Versuche implizite Voraussetzung »../m4/RCS/ltoptions.m4«.
Versuche Muster-Regel mit Ersetzung »ltoptions.m4«.
Versuche implizite Voraussetzung »../m4/s.ltoptions.m4«.
Versuche Muster-Regel mit Ersetzung »ltoptions.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.ltoptions.m4«.
Keine implizite Regel für »../m4/ltoptions.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/ltoptions.m4«.
Kein Befehl für »../m4/ltoptions.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/ltoptions.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/ltsugar.m4«.
Suche nach einer impliziten Regel für »../m4/ltsugar.m4«.
Versuche Muster-Regel mit Ersetzung »ltsugar.m4«.
Versuche implizite Voraussetzung »../m4/ltsugar.m4,v«.
Versuche Muster-Regel mit Ersetzung »ltsugar.m4«.
Versuche implizite Voraussetzung »../m4/RCS/ltsugar.m4,v«.
Versuche Muster-Regel mit Ersetzung »ltsugar.m4«.
Versuche implizite Voraussetzung »../m4/RCS/ltsugar.m4«.
Versuche Muster-Regel mit Ersetzung »ltsugar.m4«.
Versuche implizite Voraussetzung »../m4/s.ltsugar.m4«.
Versuche Muster-Regel mit Ersetzung »ltsugar.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.ltsugar.m4«.
Keine implizite Regel für »../m4/ltsugar.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/ltsugar.m4«.
Kein Befehl für »../m4/ltsugar.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/ltsugar.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/ltversion.m4«.
Suche nach einer impliziten Regel für »../m4/ltversion.m4«.
Versuche Muster-Regel mit Ersetzung »ltversion.m4«.
Versuche implizite Voraussetzung »../m4/ltversion.m4,v«.
Versuche Muster-Regel mit Ersetzung »ltversion.m4«.
Versuche implizite Voraussetzung »../m4/RCS/ltversion.m4,v«.
Versuche Muster-Regel mit Ersetzung »ltversion.m4«.
Versuche implizite Voraussetzung »../m4/RCS/ltversion.m4«.
Versuche Muster-Regel mit Ersetzung »ltversion.m4«.
Versuche implizite Voraussetzung »../m4/s.ltversion.m4«.
Versuche Muster-Regel mit Ersetzung »ltversion.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.ltversion.m4«.
Keine implizite Regel für »../m4/ltversion.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/ltversion.m4«.
Kein Befehl für »../m4/ltversion.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/ltversion.m4« neu zu erzeugen.
Betrachte Target-Datei »../m4/lt~obsolete.m4«.
Suche nach einer impliziten Regel für »../m4/lt~obsolete.m4«.
Versuche Muster-Regel mit Ersetzung »lt~obsolete.m4«.
Versuche implizite Voraussetzung »../m4/lt~obsolete.m4,v«.
Versuche Muster-Regel mit Ersetzung »lt~obsolete.m4«.
Versuche implizite Voraussetzung »../m4/RCS/lt~obsolete.m4,v«.
Versuche Muster-Regel mit Ersetzung »lt~obsolete.m4«.
Versuche implizite Voraussetzung »../m4/RCS/lt~obsolete.m4«.
Versuche Muster-Regel mit Ersetzung »lt~obsolete.m4«.
Versuche implizite Voraussetzung »../m4/s.lt~obsolete.m4«.
Versuche Muster-Regel mit Ersetzung »lt~obsolete.m4«.
Versuche implizite Voraussetzung »../m4/SCCS/s.lt~obsolete.m4«.
Keine implizite Regel für »../m4/lt~obsolete.m4« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../m4/lt~obsolete.m4«.
Kein Befehl für »../m4/lt~obsolete.m4« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../m4/lt~obsolete.m4« neu zu erzeugen.
Betrachte Target-Datei »../configure.ac«.
Suche nach einer impliziten Regel für »../configure.ac«.
Versuche Muster-Regel mit Ersetzung »configure.ac«.
Versuche implizite Voraussetzung »../configure.ac,v«.
Versuche Muster-Regel mit Ersetzung »configure.ac«.
Versuche implizite Voraussetzung »../RCS/configure.ac,v«.
Versuche Muster-Regel mit Ersetzung »configure.ac«.
Versuche implizite Voraussetzung »../RCS/configure.ac«.
Versuche Muster-Regel mit Ersetzung »configure.ac«.
Versuche implizite Voraussetzung »../s.configure.ac«.
Versuche Muster-Regel mit Ersetzung »configure.ac«.
Versuche implizite Voraussetzung »../SCCS/s.configure.ac«.
Keine implizite Regel für »../configure.ac« gefunden.
Fertig mit den Voraussetzungen für die Ziel-Datei »../configure.ac«.
Kein Befehl für »../configure.ac« und keine Voraussetzung
wurde tatsächlich verändert.
Es ist nicht notwendig, das Target »../configure.ac« neu zu erzeugen.
Betrachte Target-Datei »../aclocal.m4«.
Die Datei »../m4/as-compiler-flag.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/ax_config_dir.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/empathy-args.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/empathy-valgrind.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/gsettings.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/intltool.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/libtool.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/ltoptions.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/ltsugar.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/ltversion.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../m4/lt~obsolete.m4« wird "gestutzt" (der Abhängigkeitsgraph).
Die Datei »../configure.ac« wird "gestutzt" (der Abhängigkeitsgraph).
Fertig mit den Voraussetzungen für die Ziel-Datei »../aclocal.m4«.
Die Datei »../m4/as-compiler-flag.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/ax_config_dir.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/empathy-args.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/empathy-valgrind.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/gsettings.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/intltool.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/libtool.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/ltoptions.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/ltsugar.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/ltversion.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../m4/lt~obsolete.m4« ist älter als das davon abhängige Ziel »../aclocal.m4«.
Die Datei »../configure.ac« ist jünger als das davon abhängige Ziel »../aclocal.m4«.
Das Target »../aclocal.m4« muss neu erzeugt werden.
cd .. && make am--refresh
Nehme Kindprozess 0x089c3bd0 (../aclocal.m4) PID 10174 in die Kette auf.
Aktiver Kindprozess 0x089c3bd0 (../aclocal.m4) PID 10174
...
What is the root cause of this issue and how can I solve the problem?
The configure/Makefile.in was created with an aclocal binary called aclocal-1.13. You either don't have it installed, or yours is called different.
Make sure that you have autoconf/automake installed and then call "autoreconf" to regenerate Makefile.in & Co.

AWK merge values and replace strings

I have two files one separated by tabs and other separated by semicolons. Both files have a common ID in the first column. On the one hand I want to combine the values in column 3 based on a common ID. On the other hand I want to replace the string in column 2 of the first file with the string in column 2 of the second file, while respecting the Common ID.
First file:
ID;String;Category;
2;es un anuncio interesante que le puede servir para alguien;321;0;;
3;es un anuncio de un banco que quiere presentarse;72;0;;
4;es un anuncio de un banco que ofrece prestamos para empresas.;52;0;;
4;es un anuncio de un banco que ofrece prestamos para empresas.;70;0;;
5;credito pyme banamex para hacer crecer tu negocio;50;0;;
5;credito pyme banamex para hacer crecer tu negocio;52;0;;
5;credito pyme banamex para hacer crecer tu negocio;70;0;;
5;credito pyme banamex para hacer crecer tu negocio;71;0;;
Second file:
ID String Category;
2 Es un anuncio interesante que le puede servir para alguien.
3 Es un anuncio de un banco que quiere presentarse.
4 Es un anuncio de un banco que ofrece prestamos para empresas.
5 Credito Pyme Banamex para hacer crecer tu negocio.
Desired output:
ID String Category
2 Es un anuncio interesante que le puede servir para alguien. 321
3 Es un anuncio de un banco que quiere presentarse. 72
4 Es un anuncio de un banco que ofrece prestamos para empresas. 52 70
5 Credito Pyme Banamex para hacer crecer tu negocio. 50 52 70 71
What I have done:
awk 'BEGIN { FS=";";} NR==FNR{ CAT[$1]=CAT[$1]"\t"$3; next;}{FS="\t";textos[$1]=$2;} END{ for (ID in CAT) {print ID,textos[ID],CAT[ID];}}' fileA fileB
My Output:
2 Es un anuncio interesante que le puede servir para alguien.
3 Es un anuncio de un banco que quiere presentarse. 72
4 Es un anuncio de un banco que ofrece prestamos para empresas. 52 70
5 Credito Pyme Banamex para hacer crecer tu negocio 50 52 70 71
¡¡In the first line the value of the third column doesn't appear!!
You can use this awk:
awk -F';' -v OFS='\t' 'FNR==NR {
a[$1] = a[$1] OFS $3
next
}
FNR==1 {
FS="\t"
print
}
$1 in a {
print $1, $2 a[$1]
}' file1 file2
Output:
ID String Category
2 Es un anuncio interesante que le puede servir para alguien. 321
3 Es un anuncio de un banco que quiere presentarse. 72
4 Es un anuncio de un banco que ofrece prestamos para empresas. 52 70
5 Credito Pyme Banamex para hacer crecer tu negocio. 50 52 70 71

Bash - Parsing output of apt-get install for progress bar

I'm looking for a way to write in a file the percentage and the speed of the download of apt-get (all the line in fact)
Is it possible?
I've seen this question and the response but I wonder if there was a solution in bash, or if you can tell me the name of this type of output? Thanks
With the help of BroSlow, I've tried with this script:
#! /bin/bash
exec >/home/guillaume/work/apt-install-firefox.log 2>&1
unbuffer apt-get install --reinstall firefox
The output is what I would like:
Lecture des listes de paquets… 0%
Lecture des listes de paquets… 100%
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances… 0%
Construction de l'arbre des dépendances… 0%
Construction de l'arbre des dépendances… 50%
Construction de l'arbre des dépendances… 50%
Construction de l'arbre des dépendances
Lecture des informations d'état… 0%
Lecture des informations d'état… 0%
Lecture des informations d'état... Fait
0 mis à jour, 0 nouvellement installés, 1 réinstallés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 35,8 Mo dans les archives.
Après cette opération, 0 o d'espace disque supplémentaires seront utilisés.
0% [En cours]
Réception de : 1 http://bouyguestelecom.ubuntu.lafibre.info/ubuntu/ trusty-updates/main firefox amd64 33.0+build2-0ubuntu0.14.04.1 [35,8 MB]
0% [1 firefox 6 959 B/35,8 MB 0%]
1% [1 firefox 198 kB/35,8 MB 1%]
1% [1 firefox 351 kB/35,8 MB 1%]
1% [1 firefox 528 kB/35,8 MB 1%]
2% [1 firefox 751 kB/35,8 MB 2%]
3% [1 firefox 990 kB/35,8 MB 3%]
4% [1 firefox 1 300 kB/35,8 MB 4%]
4% [1 firefox 1 552 kB/35,8 MB 4%]
5% [1 firefox 1 794 kB/35,8 MB 5%]
6% [1 firefox 2 096 kB/35,8 MB 6%]
7% [1 firefox 2 396 kB/35,8 MB 7%]
8% [1 firefox 2 799 kB/35,8 MB 8%]
9% [1 firefox 3 171 kB/35,8 MB 9%] 511 kB/s 1min 3s
10% [1 firefox 3 575 kB/35,8 MB 10%] 511 kB/s 1min 3s
11% [1 firefox 3 865 kB/35,8 MB 11%] 511 kB/s 1min 2s
12% [1 firefox 4 275 kB/35,8 MB 12%] 511 kB/s 1min 1s
13% [1 firefox 4 706 kB/35,8 MB 13%] 511 kB/s 60s
15% [1 firefox 5 214 kB/35,8 MB 15%] 511 kB/s 59s
16% [1 firefox 5 622 kB/35,8 MB 16%] 511 kB/s 59s
Need the package expect-dev

Resources