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