web-dev-qa-db-fra.com

Comment changer un fichier en place en utilisant awk? (comme avec "SED -I")

J'ai un script awk, new.awk:

BEGIN { FS = OFS = "," }

NR == 1 {
    for (i = 1; i <= NF; i++)
        f[$i] = i
}

NR > 1 {
    begSecs = mktime(gensub(/[":-]/, " ", "g", $(f["DateTime"])))
    endSecs = begSecs + $(f["TotalDuration"])
    $(f["CallEndTime"]) = strftime("%Y-%m-%d %H:%M:%S", endSecs)
}

{ print }

J'appelle cela dans Shell

awk new.awk sample.csv

... Mais je peux voir les changements dans le terminal. Comment faire le changement dans le fichier, comme lorsque vous utilisez sed -i?

12
mittu

Essaye ça.

awk  new.awk sample.csv > tmp.csv && mv -f tmp.csv sample.csv
  • rediriger la sortie dans un fichier temp.
  • déplacez ensuite le contenu du fichier temporaire dans le fichier d'origine.
4
Siva