在bash中循环遍历行和多列

时间:2012-09-07 22:05:59

标签: bash loops

我正在尝试对包含多个具有条件的多个列(字段)的行的文件执行循环。

以下是示例文件(file.txt)的样子:

aaa  bbb  ccc
ddd  kkk
fff  ggg  hhh lll
ooo
sss

...等...

我想编写一个循环遍历第一个字段第一行的bash脚本,如果名称存在则继续到第二行。如果第一个字段的第一行的名称不存在,则测试第二个字段(在这种情况下测试名称“bbb”),依此类推,直到第四个字段。我有一个可变字段编号,最多有四(4)个字段,给定行最少有一个字段(列)。

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

显然,上面的脚本会测试行和列。但是如果第一个字段不存在,如果第二个字段不存在,我还想循环到第二个,第三个和第四个字段,测试第三个字段,直到第四个字段。

2 个答案:

答案 0 :(得分:10)

我认为你真正想做的是逐行读取文件而不是逐字逐句。您可以使用whileread执行此操作。像:

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

答案 1 :(得分:1)

这个作品给我看专栏,我觉得可以适用于你的case。

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