file1.csv
A,,C,D
A,,C,D
A,,C,D
A,,C,D
file2.csv
A,B
A,B
A,B
A,B
Output.csv souhaité
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D
J'ai essayé d'utiliser "join" et "paste" en vain. Existe-t-il une commande bash pour ce faire? La colonne "A" est la même dans les deux .csv
fichiers.
Réponses:
Avec une seule
awk
commande:Obtenez une ligne à partir de file1 et stockez-la dans une variable locale
f1
, puis imprimez la ligne qui a stocké dansf1
et enfin imprimez les troisième ($3
) et quatrième ($3
) champs du fichier1 qui ont délimité,
complètement par une virgule , et changez l'OFS (séparateur de champ de sortie [espace par par défaut]) en virgule (,
).La commande courte serait comme ceci:
collez le fichier2, puis coupez et collez la troisième colonne à la suivante (
-f3-
) du fichier1.Avec
awk
etpaste
(option A)La commande ci-dessous copie également les deux dernières colonnes (
C,D
) du fichier1 à la fin de chaque ligne du fichier2:Au-dessus de la commande, collez le contenu du fichier2, puis imprimez un délimiteur de virgule (
-d','
), puis collez les deux derniers champs (NF
est l'index du dernier champ et$NF
la chaîne dont est l'indexNF
. Il en$(NF-1)
est de même du deuxième champ avant le dernier champ) de file1 lorsque cet index redéfinit ou se sépare avec une virgule spectateur (-F','
).Avec
awk
etpaste
(option B)Cette commande est également la même que ci-dessus (
$3
et$4
pointe vers le troisième et le quatrième champ de chaque ligne du fichier1):Ou une autre solution avec
cut
commande:couper la commande de la commande ci-dessus couper d'abord le premier champ (
-f1
indexé avec un délimiteur de virgule (-d.
)) de file1 (cut -d, -f1 file1
), puis couper et coller le deuxième champ de file2 (cut -d, -f2 file2
) et enfin couper et coller la troisième colonne (-f3
) dans les nexts (-
) à partir de file1 (cut -d, -f3- file1
) à nouveau.Cette commande renvoie également le même résultat:
collez le deuxième champ de file1 (
awk -F',' '{print $1}' file1
) puis imprimez une virgule (-d,
), puis collez la deuxième colonne de file2 (awk -F',' '{print $2}' file2
), puis collez à nouveau la deuxième et la dernière colonne de file1 (awk -F',' '{print $3","$4}' file1
).la source
Voici une beauté (je pense):
Décomposé en étapes:
Étape 1. Installez csvkit:
Étape 2. Utilisez la commande join avec une virgule comme séparateur
Étape 3. Donnez-lui les colonnes que vous souhaitez. Notez comment vous l'alimentez deux fois dans la première colonne, car c'est celle sur laquelle la jointure est réellement effectuée (comportement par défaut de
join
).ou en sténographie:
Vous pouvez rediriger cette sortie standard vers un fichier (désiréOutput) si vous le souhaitez.
Les avantages
Cette méthode présente plusieurs avantages par rapport aux autres proposées.
D'abord et avant tout: il réalise une véritable jointure. Cela signifie qu'il peut également être utilisé pour des données plus complexes. Par exemple, il est très facile de faire une jointure sur un autre domaine. Il ne regarde pas simplement la position du champ, mais il tient vraiment compte de la colonne. Il fonctionne en fait avec le format des données (csv) et ne le traite pas comme du texte.
Deuxièmement, il utilise la boîte à outils csv très puissante qui vous permet également a) d'afficher des statistiques avec une seule commande (
csvstats)
, b) de vérifier si les données sont propres (csvclean
), mais aussi de les transformer en json, en sql, ou même de les charger dans python! Cette boîte à outils est largement utilisée en science des données pour la préparation des données.la source
sudo apt-get install python-dev python-pip python-setuptools build-essential
- lienEn voici une autre magnifique. Je pense que c'est la plus simple de toutes les suggestions jusqu'à présent.
Si vous n'avez pas déjà installé csvtool dans le passé, vous devez le faire
sudo apt-get install csvtool
.De la documentation:
Notez comment, dans notre cas, nous remplaçons les secondes colonnes des fichiers.
Exemples
file1.csv
file2.csv
Combiner les deux fichiers:
Ce que vous faites essentiellement est de coller la deuxième
file2.csv
colonne comme colonne 2file1.csv
.Notez que cela fonctionne également sur le même document. Si vous souhaitez échanger deux colonnes, vous pouvez le faire en utilisant le même fichier que input.csv et update.vsc.
la source
Pour déplacer un nombre choisi de colonnes d'un fichier à un autre:
à partir de deux fichiers:
fichier_1
file_2
Lorsque vous définissez
cols = 1
:Mais lorsque vous définissez
cols = 2
:cols = 3
:Comment utiliser
Copier dans un fichier vide, définissez le chemin d'accès
file1
,file2
et le nombre de colonnes pour se déplacer, l' enregistrer commemove.py
et l' exécuter par:Il est également possible d'ajouter une ou plusieurs colonnes à partir du milieu des colonnes du fichier source de cette façon.
la source
import csv
.Une autre méthode en python via le module csv.
script.py
Pour exécuter le script ci-dessus,
Production:
la source