我有一个包含多行的文本文件。我正在使用 while 命令逐行读取文件,但我需要将值存储在单独的变量中并在尾随 shell 脚本中使用它们。
该切命令限定了完整的文件不读线。
示例my_file.txt
:
d1:jobid1
id2:jobid2
Run Code Online (Sandbox Code Playgroud)
我正在使用下面的 while 循环逐行读取文件
while IFS= read -r line; do
jobid=`cut -d: -f2`
id=`cut -d: -f1`
#remaining shell-script dependent upon variables#
done < my_file.txt
Run Code Online (Sandbox Code Playgroud)
我想存储每一行的 jobid 和 idmy_file.txt
并运行尾随脚本。每行都在一个新行中
需要帮助以递归方式将值存储在变量中。如果有更好的方法来逐行读取并分别分隔和存储两个字段。
cut
默认情况下从标准输入读取。在您的命令替换中,标准输入是从循环的标准输入继承的(因为您没有为对 的调用提供其他显式输入cut
)。循环的标准输入来自您的输入文件。
结果是文件的第一行由 读取read
,而所有其他行由第一次调用读取cut
。jobid
因此,变量中的值将是一个以换行符分隔的作业 ID 字符串,而id
变量将为空。该循环将仅运行一次迭代。
例如,您可以使用
id=$( printf '%s\n' "$line" | cut -d: -f1 )
# or: id=$( cut -d: -f1 <<<"$line" )
# (in shells that supports "here-strings")
Run Code Online (Sandbox Code Playgroud)
但这将是不必要的,因为这样做会更清洁、更高效
id=$( printf '%s\n' "$line" | cut -d: -f1 )
# or: id=$( cut -d: -f1 <<<"$line" )
# (in shells that supports "here-strings")
Run Code Online (Sandbox Code Playgroud)
这利用了read
可以一次将一行输入中的数据读取到多个变量中的事实。通过设置IFS
为冒号,该行在冒号处被拆分,第一个字段被读入,id
而其余字段被读入jobid
. 根本没有必要打电话cut
。
归档时间: |
|
查看次数: |
1665 次 |
最近记录: |