2010-07-22 16 views
2

j'ai essayé la doublure awk ci-dessous (sur commande d'invite Windows): ne fonctionne pas correctementAWK remplacer le texte, mais pas pour la dernière ligne

gawk -v var="hot" "{ if(!NR){gsub(/cool/,var,$0) ;print} else{print}}" awk_test 
fichier d'entrée

est inférieure

this is a cool jack 
this nota cool kack 
this obviously a cool jack 

une solution unix est également possible

+1

La condition '' est toujours faux car NR (le numéro d'enregistrement en cours) est toujours un entier positif (NR!). –

Répondre

0
awk -vvar="hot" '{gsub("cool",hot,t);print t}{t=$0}END{print}' file 
0

Vous pouvez essayer quelque chose comme:

sed '$d' yourfile | sed 's/cool/hot/g' > newfile 
tail -1 yourfile >> newfile 

Ceci devrait d'abord faire la substitution sur tout sauf la dernière ligne du fichier, puis ajouter la dernière ligne du fichier original.

+0

c'est ok ... mais je n'ai pas sed dans mon invite de commande.je n'ai que gawk.so j'ai besoin d'une solution awk/gawk. ce qui est réellement faux avec mon script gawk. – Vijay

0

Vous pouvez également passer le nombre de lignes en tant que paramètre:

gawk -v var=hot -v lines=$(wc -l < test.txt) ' 
    NR != lines {gsub(/cool/, var)} 
    {print} 
' test.txt