Yacob
Yacob

Reputation: 525

Loop through rows and multiple columns in bash

I'm trying to do a loop on a file which has a number of rows with multiple columns (fields) with conditions.

Here is what a sample file (file.txt) looks like:

aaa  bbb  ccc
ddd  kkk
fff  ggg  hhh lll
ooo
sss

...etc...

I want to write a bash script that loops over first row of the first field and if the name exists then continues to the second row. If the name of the first row of the first field does not exist test then test the second field (in this case test the name "bbb") and so on until the fourth. I have a variable field numbers with a maximum of four(4) fields and a minimum of one field (column) for a given row.

for i in cat file.txt; do 
    echo $i
    if [ -e $i ]; then
        echo "name exists"
    else
        echo "name does not exist"
    fi
done 

Obviously the above script tests both rows and columns. But I wanted also to loop through to the second, third and fourth fields if the first field does not exist and if the second field does not exist test the third field and until the fourth.

Upvotes: 7

Views: 21302

Answers (2)

Taw HK
Taw HK

Reputation: 371

This work for me to read columns, I think it can apply for your case.

while read field1 field2 field3 field4; do
    echo $field1 $field2 $field3 $field4
done < file.txt | awk '{ print $1,$2,$3,$4 }'

Upvotes: 2

Grisha Levit
Grisha Levit

Reputation: 8617

I think what you're really trying to do is read the file line by line instead of word by word. You can do this with while and read. Like:

while read field1 field2 field3 field4; do
  if [ -e "$field1" ]; then
     something
  elif [ -e "$field2" ]; then
      ...
  fi
done < file.txt

Upvotes: 13

Related Questions