【问题标题】:for i in `cat file` type with 2 variables and 2 filesfor i in `cat file` 类型有 2 个变量和 2 个文件
【发布时间】:2011-01-08 16:06:14
【问题描述】:

我有这个脚本

for i in `cat file`
do
echo $i
done

如何在同一个循环中拥有来自 2 个不同文件的 2 个变量

得到

echo $i + $f

【问题讨论】:

    标签: bash for-loop


    【解决方案1】:

    使用经典 shell 而非 Bash 特定结构的简单解决方案使用:

    paste file1 file2 |
    while read i j
    do echo $i and $j
    done
    

    这假定来自 file1 的数据中没有空格(无论如何都会处理 file2 中的空格,因为j 获取每行输入的第二个和后续单词)。如果您需要担心这一点,那么您可以修改 IFS 等:

    paste -d'|' file1 file2 |
    while IFS='|' read i j
    do echo $i and $j
    done
    

    【讨论】:

      【解决方案2】:

      您可以使用以下脚本:

      #!/usr/bin/bash
      
      state=0
      for i in $(paste file1 file2) ; do
          if [[ $state -eq 0 ]] ; then
              state=1
              save=$i
          else
              state=0
              echo $save and $i
          fi
      done
      

      使用两个输入文件:

      $ cat file1
      1
      2
      3
      4
      5
      

      和:

      $ cat file2
      a
      b
      c
      d
      e
      

      你会得到以下输出:

      1 and a
      2 and b
      3 and c
      4 and d
      5 and e
      

      这个脚本使用 paste 来创建一个在两个文件之间交替的新参数序列,然后是一个非常简单的状态机来拾取和处理这些对。

      请记住,如果您的行包含空格,它将不起作用,但我假设这不是问题,因为您的原始脚本也没有。

      【讨论】:

        【解决方案3】:
        while IFS='|' read -r i j; do echo $i and $j; done < <(paste -d '|' file1 file2)
        

        通过选择未出现在数据中的分隔符,即使数据包含空格(例如),这也将起作用。

        【讨论】:

          猜你喜欢
          • 2015-03-18
          • 1970-01-01
          • 1970-01-01
          • 2010-11-13
          • 1970-01-01
          • 2019-02-24
          • 1970-01-01
          • 1970-01-01
          • 2018-08-15
          相关资源
          最近更新 更多