day
day

Reputation: 2352

Collect numerals at the beginning of the file

I have a text file which contains some numerals, for example,

There are 60 nuts and 35 apples,
but only 24 pears.

I want to collect these numerals (60, 35, 24) at the beginning of the same file, in particular, I want after processing, the file to read

read "60"
read "35"
read "24"

There are 60 nuts and 35 apples,
but only 24 pears.

How could I do this using one of the text manipulating tolls available in *nix?

Upvotes: 2

Views: 121

Answers (2)

glenn jackman
glenn jackman

Reputation: 246827

You can script an ed session to edit the file in place:

{ 
  echo 0a    # insert text at the beginning of the file
  grep -o '[0-9]\+' nums.txt | sed 's/.*/read "&"/'
  echo ""
  echo .     # end insert mode
  echo w     # save
  echo q     # quit
} | ed nums.txt

More succinctly:

printf "%s\n" 0a "$(grep -o '[0-9]\+' nums.txt|sed 's/.*/read "&"/')" "" . w q | ed nums.txt

Upvotes: 2

codaddict
codaddict

Reputation: 455072

One way to do it is:

egrep -o [0-9]+ input | sed -re 's/([0-9]+)/read "\1"/' > /tmp/foo
cat input >> /tmp/foo 
mv /tmp/foo input

Upvotes: 1

Related Questions