7

我正在尝试对一个文件进行循环,该文件具有多列(字段)的多行和条件。

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

aaa  bbb  ccc
ddd  kkk
fff  ggg  hhh lll
ooo
sss

...ETC...

我想编写一个循环遍历第一个字段的第一行的 bash 脚本,如果名称存在,则继续到第二行。如果第一个字段的第一行的名称不存在 test 然后测试第二个字段(在这种情况下测试名称“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 

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

4

2 回答 2

13

我认为你真正想做的是逐行而不是逐字读取文件。您可以使用while和来做到这一点read。喜欢:

while read field1 field2 field3 field4; do
  if [ -e "$field1" ]; then
     something
  elif [ -e "$field2" ]; then
      ...
  fi
done < file.txt
于 2012-09-07T23:35:02.650 回答
2

这对我来说是阅读专栏的工作,我认为它可以适用于你的情况。

while read field1 field2 field3 field4; do
    echo $field1 $field2 $field3 $field4
done < file.txt | awk '{ print $1,$2,$3,$4 }'
于 2021-03-04T18:18:48.680 回答