J'ai deux fichiers dont je veux créer un troisième qui contient toutes les informations.
fichier 1:
a 111
b 222
c 333
d 666
e 777
fichier 2:
111 x1
222 x2
333 x3
444 x4
555 x5
666 x6
777 x7
888 x8
Je voudrais les combiner comme suit:
111 x1 a
222 x2 b
333 x3 c
444 x4 0
555 x5 0
666 x6 d
777 x7 e
888 x8 0
Remarque:
La deuxième colonne du fichier 1 est un sous-ensemble de la première colonne du fichier 2
command-line
text-processing
gforce89
la source
la source
-e0
pas besoin de perl :)Utilisation de join:
La commande join joint les lignes de deux fichiers qui partagent un champ de données commun. Dans ce cas: Joignez le fichier2 et le fichier1 en utilisant le champ 1 (
-1 1
) du fichier2 et le champ 2 (-2 2
) du fichier1.La sortie sera: "champ joint, champ 2 du fichier2, champ 1 du fichier1" (
-o'0,1.2,2.1'
), s'il y a un champ manquant, mettre 0 (-e0
)Si l'un des deux fichiers a plus d'enregistrements, ajoutez-les (dans ce cas, fichier2) (
-a1
)Veuillez vous référer à la page de manuel de la commande join
la source
Un peu de
awk
magie:ou
Production
Explication
FNR==NR{a[$2]=$1;next}
Exécute
file1
(FNR==NR
) et crée une structure de valeur-clé. La clé est la deuxième colonne ($2
) defile1
, la valeur est la première colonne ($1
) defile1
{if(a[$1]==""){a[$1]=0};print $1,$2,a[$1]}
Renverse
file2
etif(a[$1]==""){a[$1]=0}
Si la clé de la première colonne (
$1
) dansfile2
n'existe pas dansfile1
, nous avons besoin d'un0
print $1,$2,a[$1]
Imprimer (en utilisant
print
) la première et la deuxième colonne defile2
et la valeur de la structure clé-valeur avec la clé de la première colonne ($1
) defile2
ou
printf "%s%s%s%s%s\n",$1,FS,$2,FS,a[$1]}'
Imprimer (en utilisant
printf
) la première et la deuxième colonne defile2
et la valeur de la structure clé-valeur avec la clé de la première colonne ($1
) defile2
.FS
est le séparateur entre les colonnes, extrait du fichier d'entrée"%s%s%s%s%s\n"
est le formatage de la sortie
%s
- Chaîne\n
- Nouvelle lignela source
Utilisation de q :
Il peut parfois être plus lisible de cette façon.
la source
q
est dans le packagepython3-q-text-as-data
(Python 3) et dans le packagepython-q-text-as-data
(Python 2).q
package? Je ne semble pas pouvoir installer ni l'unpython-q-text-as-data
ni l' autrepython3-q-text-as-data
. "E: impossible de localiser le paquet python3-q-text-as-data". Mon système a déjà installépython
,python2.7
,python3
etpython3.4
.