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. Et je veux appends "certains_string" aux colonnes 3 et 4: p> 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
3 Réponses :
Vous devez définir fs code> sur virgule, pas seulement
of code>. Il y a un raccourci pour régler
fs code>, c'est l'option
-f code>.
ifs code> est un bash i> chose, pas une chose malade. Dans
awk code>, le séparateur de champ d'entrée est juste
fs code>. 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 code>, 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 "\ '" code> 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 code>
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
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=,
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.