bashr

Search a file and return the Kth word on the Nth line.

 

bashr s1.txt 3 1 

Usage: bashr s1.txt 3 1 
arg1 - input file name
arg2 - line number (N, first lies is =1)
arg3 - word number (N, first word is =1)

% cat s1.txt
1.23 , here is extra stuff on the line I will ignore 
A
Boot 17.333
This is line 4 

% bashr s1.txt 3 1
Boot

% bashr s1.txt 1 6
stuff

Here is what I wrote this for: 
% cat My.egs
mgp -radec=14.291777,52.974603,gc1,14.286354,52.738569,gc2,14.258120,52.896464,wf1,14.290218,52.823983,wf2
14.291777 52.974603 gc1
14.286354 52.738569 gc2
14.258120 52.896464 wf1
14.290218 52.823983 wf2

% bashr My.egs 3 2  

 
I have written much of this up in my bash basics documents, but showing the bashr source code may be useful here:
 
#!/bin/bash
# Jun2016 == find word K in a file (infile) on line N 
        
# Check command line arguments 
if [ -z "$1" ]
then
 printf "Usage: bashr s1.txt 3 1 \n"
 printf "arg1 - input file name\n"
 printf "arg2 - line number (N, first lies is =1)\n" 
 printf "arg3 - word number (K, first word is =1)\n" 
 exit
fi
if [ -z "$2" ]
 then
 printf "arg2 - line number (N)\n"
 exit
fi
if [ -z "$3" ]
 then
 printf "arg3 - word number (K)\n"
 exit
fi

fin="$1"
nline="$2"
kword="$3"

i="0"
exec<$fin
while read -r line; do
 i=$[$i+1]

# split (using white space) the line into array elements
#  IFS=', ' read -r -a array <<< "$line"
   IFS=' ' read -r -a array <<< "$line"

# assign names to some of the array values
  word1="${array[0]}"
  word2="${array[1]}"
  word3="${array[2]}"

  nn=$[$kword-1] 
  word="${array[nn]}"
#  printf "\tline = $i   nn = $nn     Kth word = $word\n"

  if [ $i = "$nline" ]
  then
   answer1="$word"
  fi

done

printf "$answer1\n"

 



Back to SCO CODES page