RHEL 6.5 имеет версию GNU awk, как показано ниже
-bash-4.1$ awk --version
GNU Awk 3.1.7
А в windows 10 я вижу это как -
$ awk --version
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2)
Программа AWK использует встроенные переменные awk ARGV
и ARGIND
. Это что-то связано с системным языком в RHEL?
base.csv
:
steve,tignor,ash,michael,jose,sam,joshua
0,0,0,0,0,0,0
file1
:
tignor,michael,jose
888,9,-2
file2
:
ash,joshua
77,66
merge.awk
:
#!/bin/awk
#!/bin/bash
ARGIND==1 && FNR==1{
split($0, base, ",")
printf("file,%s\n",$0)
}
ARGIND > 1 && FNR==1{
split($0, names, ",")
printf("%s", ARGV[ARGIND])
}
ARGIND > 1 && FNR==2{
split($0, values, ",")
for(i in names)
line[names[i]] = values[i]
for(i in base){
if(base[i] in line)
printf(",%s", line[base[i]])
else
printf(",0")
}
delete line
print ""
}
Запуск из Linux приводит к неправильному порядку значений в файле 1 и файле 2
awk -f merge.awk base.csv file*
file,steve,tignor,ash,michael,jose,sam,joshua
file1,9,-2,0,0,0,888,0
file2,0,0,0,66,0,0,77
Но из windows это работает отлично и так, как я хочу.
$ awk -f merge.awk base.csv file1.csv file2.csv
file,steve,tignor,ash,michael,jose,sam,joshua
A1.csv,0,888,0,9,-2,0,0
A2.csv,0,0,77,0,0,0,66
Мы будем благодарны за любые подсказки.