J'ai un fichier qui ressemble à ceci:
ID101 G T freq=.5 nonetype ANC=.1 addinfor
ID102 A T freq=.3 ANC=.01 addinfor
ID102 A T freq=.01 type=1 ALT=0.022 ANC=.02 addinfor
Comme vous pouvez le voir, chaque ligne a un nombre légèrement différent de colonnes. Je veux spécifiquement la colonne 1, la colonne 2, la colonne 3, la colonne 4 et la colonne qui commence parANC=
Sortie désirée:
ID101 G T freq=.5 ANC=.1
ID102 A T freq=.3 ANC=.01
ID102 A T freq=.01 ANC=.02
J'utilise généralement la commande an awk pour analyser les fichiers:
awk 'BEGIN {OFS = "\t"} {print $1, $2, $3, $4}'
Existe-t-il un moyen simple de modifier cette commande pour qu'elle fonctionne dans des situations comme celle-ci?
Je pense que quelque chose comme ça pourrait fonctionner:
awk '{for(j=1;j<=NF;j++){if($j~/^ANC=/){print $j}}}'
Cependant, comment puis-je modifier cela pour imprimer également les premières colonnes?
text-processing
sed
awk
cosmictypiste
la source
la source
i=5
il?En supposant que la
ANC=
colonne est toujours l'avant-dernière colonne (comme dans les données d'exemple):NF
est le nombre de champs (colonnes) quiawk
divise chaque enregistrement (ligne) en.$(NF-1)
est la valeur de l'avant-dernier champ.la source
Bref
$, =>
OFS
@F[0..3]
=>$F[0] $F[1] $F[2] $F[4]
la source