【问题标题】:Running loop number of times as per number of lines in the content of the text file ( Unix Shell Scripting )根据文本文件内容中的行数运行循环次数(Unix Shell 脚本)
【发布时间】:2019-05-13 17:00:54
【问题描述】:

我在文本文件中有一些多行。 示例:我在文本文件中有 3 行,并且

Emp_Table_Columns.txt|Employee_Temp.csv|Emp.csv
Dep_Table_Columns.txt|Dep_Temp.csv|Dep.csv
Line_Table_Columns.txt|Line_Temp.csv|Line.csv

我想运行我的 FOR 循环(或任何其他循环)3 次,并且在运行时我想将值 Field 1 、 Field 2 、 field 3 传递给变量。

假设第一个循环正在运行,那么我将阅读 Emp_Table_Columns.txt。如果第二个循环正在运行,我将阅读 Dep_Table_Columns.txt。请帮助我在 Shell Script 或 linux 中提出一些建议。

【问题讨论】:

    标签: linux shell unix scripting


    【解决方案1】:

    你不想要一个 for 循环。您想遍历文件中的所有行。例如

    while IFS=\| read col1 col2 col3 etc; do 
       ...
    done < text_file
    

    在循环体中,变量 $col1$col2$col3 将分别包含第 1 列、第 2 列和第 3 列中的值。变量 $etc 将包含第 4 列及以后的列(如果有的话;您可能希望 $etc 是空字符串)。随意命名变量,希望使用描述列内容的名称。请注意,我们将IFS 显式设置为使用| 作为列分隔符,因为read 默认会在空白处拆分(取决于IFS 的当前值)。

    【讨论】:

    • 您好,感谢您的回复。你能详细说明一下答案吗?
    • 不确定如何详细说明。互联网上有很多关于在 while 循环中使用 read 的信息。
    • 一个疑问。这意味着如果我根据循环运行的行数使用这个while循环,并且根据循环数,我可以将相应的行值读入变量。我说的对吗?
    • 循环将为文件的每一行运行一次迭代,直到它无法从文件中读取更多行。
    • 请注意,这不一定与“文件的每一行一次”相同,因为文件中的行数可以是非常动态的。如果循环将数据附加到文件中,或者其他进程截断了文件,或者硬件故障导致读取错误,则可能会发生意外情况。但是,如果文件没有变化并且没有错误,那么将其视为遍历文件的每一行并不是不合理的。
    猜你喜欢
    • 2017-08-25
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2016-05-31
    • 2013-08-14
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多