如何使用 shell 脚本遍历每行包含多个单词的文本文件?
How to iterate over text file having multiple-words-per-line using shell script?
我知道当文本文件包含如下内容时如何遍历文本行:
abc
pqr
xyz
但是,如果我的文本文件的内容如下所示,
abc xyz
cdf pqr
lmn rst
并且我需要将值 "abc" 存储到一个变量并将 "xyz" 存储到另一个变量。我该怎么做?
read
将行拆分 $IFS
次,次数与传递变量给它的次数相同:
while read var1 var2 ; do
echo "var1: ${var1} var2: ${var2}"
done
你看,如果你传递 var1 和 var2,两列都会转到单独的变量。但请注意,如果该行包含更多列,则 var2 将包含整个剩余行,而不仅仅是 column2.
键入 help read
了解更多信息。
如果分隔符是 space 那么你可以这样做:
#!/bin/bash
ALLVALUES=()
while read line
do
ALLVALUES+=( $line )
done < "/path/to/your/file"
所以之后,您可以通过 ${ALLVALUES[0]}
或 ${ALLVALUES[1]}
等引用元素
这个 awk 命令逐字读取输入:
awk -v RS='[[:space:]]+' '1' file
abc
xyz
cdf
pqr
lmn
rst
要填充 shell 数组,请在 进程替换中使用 awk 命令:
arr=()
while read -r w; do
arr+=("$w")
done < <(awk -v RS='[[:space:]]+' '1' file)
并打印数组内容:
declare -p arr
declare -a arr='([0]="abc" [1]="xyz" [2]="cdf" [3]="pqr" [4]="lmn" [5]="rst")'
如果您想将文件中的每个单词读取到一个数组中,您可以这样做:
arr=()
while read -r -a _a; do
arr+=("${a[@]}")
done < infile
它使用 -r
来避免 read
解释输入中的反斜杠,并使用 -a
将单词(在 $IFS
上拆分)拆分为一个数组。然后它将该数组的所有元素追加到累积数组,同时对于 globbing 和其他元字符是安全的。
我知道当文本文件包含如下内容时如何遍历文本行:
abc
pqr
xyz
但是,如果我的文本文件的内容如下所示,
abc xyz
cdf pqr
lmn rst
并且我需要将值 "abc" 存储到一个变量并将 "xyz" 存储到另一个变量。我该怎么做?
read
将行拆分 $IFS
次,次数与传递变量给它的次数相同:
while read var1 var2 ; do
echo "var1: ${var1} var2: ${var2}"
done
你看,如果你传递 var1 和 var2,两列都会转到单独的变量。但请注意,如果该行包含更多列,则 var2 将包含整个剩余行,而不仅仅是 column2.
键入 help read
了解更多信息。
如果分隔符是 space 那么你可以这样做:
#!/bin/bash
ALLVALUES=()
while read line
do
ALLVALUES+=( $line )
done < "/path/to/your/file"
所以之后,您可以通过 ${ALLVALUES[0]}
或 ${ALLVALUES[1]}
等引用元素
这个 awk 命令逐字读取输入:
awk -v RS='[[:space:]]+' '1' file
abc
xyz
cdf
pqr
lmn
rst
要填充 shell 数组,请在 进程替换中使用 awk 命令:
arr=()
while read -r w; do
arr+=("$w")
done < <(awk -v RS='[[:space:]]+' '1' file)
并打印数组内容:
declare -p arr
declare -a arr='([0]="abc" [1]="xyz" [2]="cdf" [3]="pqr" [4]="lmn" [5]="rst")'
如果您想将文件中的每个单词读取到一个数组中,您可以这样做:
arr=()
while read -r -a _a; do
arr+=("${a[@]}")
done < infile
它使用 -r
来避免 read
解释输入中的反斜杠,并使用 -a
将单词(在 $IFS
上拆分)拆分为一个数组。然后它将该数组的所有元素追加到累积数组,同时对于 globbing 和其他元字符是安全的。