0
votes

Ajouter une chaîne aux colonnes à bash

J'ai un fichier délimité par des virgules auquel je souhaite apporter une chaîne dans des colonnes spécifiques. J'essaie faire quelque chose comme ça , mais je ne pouvais pas le faire jusqu'à présent. XXX PRE>

Et je veux appends "certains_string" aux colonnes 3 et 4: p> xxx pré>

J'essayais quelque chose de similaire à la solution de suggestion, mais en vain non: P >

awk -v OFS=$'\,' '{ $3="some_string" $3; print}' $lookup_file


2 commentaires

Pourquoi tagué bash et pas malhésique?


@ctac_ J'ai ajouté la balise AWK maintenant. Mon idée initiale n'était pas d'aller spécifiquement pour Awk, mais pour Awk ou Bash.


3 Réponses :


1
votes

Vous devez définir fs sur virgule, pas seulement of . Il y a un raccourci pour régler fs , c'est l'option -f . xxx


4 commentaires

ifs est un bash chose, pas une chose malade. Dans awk , le séparateur de champ d'entrée est juste fs . Cela ne signifie pas que votre solution est fausse, juste que vous utilisez la mauvaise terminologie.


@paxdiablo merci. Puisque je n'utilise presque toujours -f , je n'ai jamais à gérer le nom de variable réel.


Merci beaucoup @paxdiablo et @barmar. Je me demande, que si la chaîne à ajouter a des citations simples? J'ai essayé avec "\ '" mais cela ne fonctionne pas


Nevermind, je l'ai trouvé dans ici awk -f "," -v quote = "'" -v de = "'', '"' {imprimé citation 3 $ 3, $ 4 citation} '$ lookup_file



2
votes

Vous pouvez le faire avec (presque) ce que vous avez:

pax> echo 're1,1,a1e,a2e,AGT
re2,2,a1w,a2w,AGT
re3,3,a1t,a2t,ACGTCA
re12,4,b1e,b2e,ACGTACT' | awk 'BEGIN{FS=OFS=","}{$3 = "pre3:"$3; $4 = "pre4:"$4; print}'

re1,1,pre3:a1e,pre4:a2e,AGT
re2,2,pre3:a1w,pre4:a2w,AGT
re3,3,pre3:a1t,pre4:a2t,ACGTCA
re12,4,pre3:b1e,pre4:b2e,ACGTACT


0 commentaires

1
votes

AWK code> L'action par défaut est de concaténer, de sorte que vous pouvez simplement placer des cordes côte à côte et elles seront traitées comme une. 1 signifie vrai, donc sans {action} code> il assumera "Imprimer". Vous pouvez utiliser l'expansion de BRACE BASH pour attribuer plusieurs variables après le script.

awk '{$3 = "three" $3; $4 = "four" $4} 1' {O,}FS=,


0 commentaires