【问题标题】:Loop through rows and multiple columns in bash循环遍历bash中的行和多列
【发布时间】:2012-09-07 22:05:58
【问题描述】:

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

示例文件 (file.txt) 如下所示:

aaa  bbb  ccc
ddd  kkk
fff  ggg  hhh lll
ooo
sss

...等等...

我想编写一个循环遍历第一个字段的第一行的 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 

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

【问题讨论】:

    标签: bash loops


    【解决方案1】:

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

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

    【讨论】:

    • 质疑 OP 的动机并不能回答问题。
    • 解释请求,提出方法(逐行而不是逐字),然后正确地提供正确的答案,即视为回答了问题。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      相关资源
      最近更新 更多