Atoof
Atoof

Reputation: 11

add a column to multiple text files with bash

I am trying to add a formatted column between columns of multiple text files. By using

awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]" "$2}7' file file

I can convert a file that has a form

1 2 3 4
10 20 30 40 
100 200 300 400

to

1 1800 3 4
10 9900 30 40
100 90900 300 400

How can I do above operation to multiple .dat files?

Upvotes: 1

Views: 143

Answers (1)

Ed Morton
Ed Morton

Reputation: 203324

tmp="/usr/tmp/tmp$$"
for file in *
do
    awk '...' "$file" "$file" > "$tmp" && mv "$tmp" "$file"
done

wrt your script, though:

awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]" "$2}7' file file

Never use the letter l (el) as a variable name as it looks far too much like the number 1 (one). I'd actually write it as:

awk 'NR==FNR{c[++n]=$3;next}{$2=($3+c[1])*c[n]" "$2}7' file file

or if memory is a concern for a large file:

awk 'NR==FNR{c[NR==1]=$3;next}{$2=($3+c[1])*c[0]" "$2}7' file file

Upvotes: 1

Related Questions