Certe volte capita di non aver abbastanza memoria in un dispositivo da non aver a disposizione anche solo i comandi base della shell di linux, Ad esempio, se siete costretti ad utilizzare la shell sh non avrete a disposizione il comando paste, che consente di unire assieme le colonne di due o più file. In questo articolo vedremo come realizzare l’equivalente della funzione paste in linguaggio awk.
Per prima cosa creiamo un file che chiamiamo paste.awk ed andiamo ad inserirgli queste istruzioni:
FILENAME == ARGV[1] { one[FNR]=$1 }
FILENAME == ARGV[2] { two[FNR]=$1 }
FILENAME == ARGV[3] { three[FNR]=$1 }
FILENAME == ARGV[4] { four[FNR]=$1 }
FILENAME == ARGV[5] { five[FNR]=$1 }
END {
for (i=1; i<=length(one); i++) {
print one[i], two[i], three[i], four[i], five[i]
}
}
Come potete notare, in questo esempio andiamo a passare come parametro (tramite linea di comando) 5 files. Se dovete utilizzare meno/più files, basta togliere/aggiungere una/più riga/he “FILENAME”.
Infine per lanciare lo script eseguiremo questo comando dalla shell che salverà il risultato nel file “result”:
awk -f paste.awk file1 file2 file3 file4 file5 > result