Ceci est une ligne du fichier d'entrée:Comment une sous-chaîne dans awk
FOO BAR 0,40 0,20 0,40 0,50 0,60 0,80 0,50 0,50 0,50 -43,00 100010101101110101000111010
Et une commande awk qui vérifie une certaine position si elle est un « 1 » ou « 0 » à la colonne 13 Quelque chose comme:
awk -v values="${values}" '{if (substr($13,1,1)==1) printf values,$1,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13}' foo.txt > bar.txt
les valeurs des œuvres variables, mais je veux juste dans l'exemple ci-dessus pour vérifier si le premier bit si elle est égal à « 1 ".
EDIT
Ok, donc je suppose que je ne suis pas très clair dans ma question. Le "$ 13" dans la méthode substr est en fait la chaîne de bits. Donc, cet awk veut passer toutes les lignes dans foo.txt qui ont un "1" à la position "1" de la chaîne de bits à la colonne "$ 13". J'espère que cela clarifie les choses.
EDIT 2
Ok, laissez-moi le décomposer vraiment facile. Le code ci-dessus sont des exemples, donc la ligne d'entrée est l'une des nombreuses lignes. Donc, toutes les lignes n'ont pas de 1 à la position 8. J'ai vérifié pour voir si une certaine position a deux occurrences, de sorte que dans tous les cas, je devrais obtenir une sortie. Chose est que dans toutes les lignes il ne trouve pas de "1" sur les posistions que je choisis, mais quand je dis qu'il doit trouver un "0" alors il me renvoie toutes les lignes.
Votre commande awk fonctionne pour moi en fonction de vos besoins édités. Comment ça ne marche pas pour toi? Y a-t-il des champs après le 13? Sinon vous pouvez imprimer $ 0 qui est la ligne entière ('valeurs printf, $ 0') –
Je pourrais utiliser $ 0, sinon pour le fait que j'ai exclu $ 2 exprès. Donc, la séquence est $ 1, $ 3, $ 4 etc. Je veux pouvoir dire: si la huitième position de la chaîne de bits (la 13ème colonne dans chaque ligne de foo.txt) est égale à "1", ajoutez cette ligne à la barre .txt – lugte098
Oups, j'ai manqué le $ 2 manquant. Que obtenez-vous si vous utilisez 'if (substr ($ 13,8,1) == 1) printf ...'? Cela devrait fonctionner. –