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.
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
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 }'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With