J'ai deux fichiers que je veux comparer leur J'essaie avec le code ci-dessous - que je m'attends à ce que cela fonctionne -: P> 1ère colonnes code> et ajouter la colonne
2nd code> de
file2.txt code> à la fin de File1.txt Code> Seulement s'il y a une correspondance:
NC_000008.10 1264 5646 G_synym=E4566 chr8
NC_000008.10 1264 5646 G=AGO2 chr8
NC_000008.10 5584 5646 G=AGO2 chr8
NC_000008.10 5218 5410 G=AGO2 chr8
NC_000008.10 2911 3031 G=AGO2 chr8
NC_000008.10 2552 2733 G=AGO2 chr8
NC_000008.10 0473 0609 G=AGO2 chr8
NC_000008.10 9494 9628 G=AGO2 chr8
NC_000008.10 8584 8671 G=AGO2 chr8
NC_000008.10 7188 7335 G=AGO2 chr8
3 Réponses :
Le code que vous devriez utiliser dans awk code> aurait dû être
awk 'FNR == NR { hash[$1] = $2; next } $1 in hash { NF++; $NF = hash[$1] }1' file2 file1
Essayez ceci s'il vous plaît: Vous devez d'abord lire File2, puis File1. P> Cependant, un peu ambigu dans votre question cependant, vous n'avez pas dit si Une autre chose est, les champs de sortie sont séparés par un seul espace. Étant donné que vos fichiers d'entrée semblent bien au format, vous pouvez donc souhaiter Remarque Si File2 pourrait être vide, vous devez modifier ne correspond pas aux lignes code> doit imprimer ou non.
Si vous ne voulez pas que ces lignes ne correspondent pas, alors: p> -v ofs = "\ t" code> pour séparer la sortie avec
onglet code>. p>
nr == fnr code> sur des méthodes de vérification des fichiers différents, comme
argind == 1 code> pour GNU awk, ou
fichier nom == "fichier2.txt" code> ou
nom_fr == argv [1] code> etc. p>
nr == fnr code > Check Fichier, cela signifie fondamentalement le premier fichier de lecture (
file2.txt code> ici).
A code> est le tableau pour stocker 2nd ligne de fichier1.txt, en utilisant sa 1ère ligne comme clé.
1 $ dans A CODE> Voir si
$ 1 code> existe dans le tableau
A code> comme clé, s'il existe des moyens correspondants. (Vous pouvez passer à
A [$ 1] code> si vous souhaitez vérifier la valeur à la place. Lorsque vous êtes sûr que la valeur ne sera pas vide, vous pouvez les utiliser de manière interchangeable.)
++ NF CODE> Augmentez le numéro de champ par 1.
$ NF code> représente la dernière colonne. Alors,
$ (++ nf) code> représente la colonne après
File2.txt Code> La dernière colonne.
Dernier 1 code> est juste un simple
vrai code> là, pour impliquer un
{impression} code> bloc. P> p>
Oui, désolé j'ai édité ma question comme je ne veux que les correspondances. Pour votre code, cela fonctionne! Pouvez-vous expliquer un peu si possible?
@bapors mis à jour. Je vous suggère également de lire DOC et Man Awk < / code>.
Si les fichiers sont triés dans la touche, le plus simple est
$ join -a1 file1 file2 | column -t NC_000008.10 1264 5646 G_synym=E4566 chr8 NC_000008.10 1264 5646 G=AGO2 chr8 NC_000008.10 5584 5646 G=AGO2 chr8 NC_000008.10 5218 5410 G=AGO2 chr8 NC_000008.10 2911 3031 G=AGO2 chr8 NC_000008.10 2552 2733 G=AGO2 chr8 NC_000008.10 0473 0609 G=AGO2 chr8 NC_000008.10 9494 9628 G=AGO2 chr8 NC_000008.10 8584 8671 G=AGO2 chr8 NC_000008.10 7188 7335 G=AGO2 chr8
Comment ajouter une colonne à un fichier se rapportant à votre sujet de
saisir tous les matchs entre deux colonnes code>? Quelles sont les 2 colonnes?