Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 即使将FS作为逗号放置,awk也会考虑FS的空间_Bash_Unix_Awk - Fatal编程技术网

Bash 即使将FS作为逗号放置,awk也会考虑FS的空间

Bash 即使将FS作为逗号放置,awk也会考虑FS的空间,bash,unix,awk,Bash,Unix,Awk,我已经将awk的FS设置为FS=“,”,但它仍然使用空格作为分隔符。使用下面的代码后,它创建了3个数组元素,一个用于commma,另一个用于space。请建议如何限制awk不将空间用作FS 代码: arr_values=(`awk 'BEGIN{FS = ","} {for (i=0; i<=NF; i++) print $i };

我已经将awk的FS设置为FS=“,”,但它仍然使用空格作为分隔符。使用下面的代码后,它创建了3个数组元素,一个用于commma,另一个用于space。请建议如何限制awk不将空间用作FS

代码:

arr_values=(`awk  'BEGIN{FS = ","} 
                        {for (i=0; i<=NF; i++)
                           print $i
                        }; 
                   END{}' File`)
for ((i=0; i<${#arr_values[@]}; i++))
do
  echo ${arr_values[$i]}
done
输出:

abc
def
1
abc
def
首先,应该环绕以防止不必要的分词。当命令输出扩展为一个未加引号的数组时,每个以空格分隔的字段将被分隔为自己的元素

此外,正如jas所提到的,Awk循环应该初始化
i
1
而不是
0
。Awk中的
$0
记录是整行,这就是数组包含重复项的原因

但是,引用变量并不能满足您的需要:

$ arr_values=("$(awk -F', ' '{for (i=1; i<=NF; i++) print $i}' File)")
$ echo "${arr_values[0]}"
1
abc def

首先,应将其包围起来,以防止不必要的分词。当命令输出扩展为一个未加引号的数组时,每个以空格分隔的字段将被分隔为自己的元素

此外,正如jas所提到的,Awk循环应该初始化
i
1
而不是
0
。Awk中的
$0
记录是整行,这就是数组包含重复项的原因

但是,引用变量并不能满足您的需要:

$ arr_values=("$(awk -F', ' '{for (i=1; i<=NF; i++) print $i}' File)")
$ echo "${arr_values[0]}"
1
abc def

首先,应将其包围起来,以防止不必要的分词。当命令输出扩展为一个未加引号的数组时,每个以空格分隔的字段将被分隔为自己的元素

此外,正如jas所提到的,Awk循环应该初始化
i
1
而不是
0
。Awk中的
$0
记录是整行,这就是数组包含重复项的原因

但是,引用变量并不能满足您的需要:

$ arr_values=("$(awk -F', ' '{for (i=1; i<=NF; i++) print $i}' File)")
$ echo "${arr_values[0]}"
1
abc def

首先,应将其包围起来,以防止不必要的分词。当命令输出扩展为一个未加引号的数组时,每个以空格分隔的字段将被分隔为自己的元素

此外,正如jas所提到的,Awk循环应该初始化
i
1
而不是
0
。Awk中的
$0
记录是整行,这就是数组包含重复项的原因

但是,引用变量并不能满足您的需要:

$ arr_values=("$(awk -F', ' '{for (i=1; i<=NF; i++) print $i}' File)")
$ echo "${arr_values[0]}"
1
abc def


Awk没有使用空格作为分隔符,我保证。仅隔离awk部分,您将看到。不确定是否要以
0
开始for循环-在这种情况下,awk正在打印
$0
$1
,和
$2
$0
是整行)。你能展示你的预期输出吗?关于autput没有什么特别的。我真正需要的是两个数组元素element1=1 element2=abc defAwk没有使用空格作为分隔符,我保证。仅隔离awk部分,您将看到。不确定是否要以
0
开始for循环-在这种情况下,awk正在打印
$0
$1
,和
$2
$0
是整行)。你能展示你的预期输出吗?关于autput没有什么特别的。我真正需要的是两个数组元素element1=1 element2=abc defAwk没有使用空格作为分隔符,我保证。仅隔离awk部分,您将看到。不确定是否要以
0
开始for循环-在这种情况下,awk正在打印
$0
$1
,和
$2
$0
是整行)。你能展示你的预期输出吗?关于autput没有什么特别的。我真正需要的是两个数组元素element1=1 element2=abc defAwk没有使用空格作为分隔符,我保证。仅隔离awk部分,您将看到。不确定是否要以
0
开始for循环-在这种情况下,awk正在打印
$0
$1
,和
$2
$0
是整行)。你能展示你的预期输出吗?关于autput没有什么特别的。我真正需要的是两个数组元素element1=1 element2=abc def谢谢John的回答,但是数组赋值有问题。它基本上只生成一个元素的数组,这个元素就是John的答案,但是数组赋值有问题。它基本上只生成一个元素为1的数组,然后在下一行生成abc def。我尝试初始化一个变量并在循环后递增,但它从未递增。我需要两个元素在数组中。@我明白了,我可能误解了你的初衷。我认为
readarray
是这项工作的最佳工具。请参阅更新的答案。我认为您正确理解了最初的意图,但您的代码生成的输出部分是正确的,我的意思是它以两行形式给出输出,但实际上只有一个元素以两行形式显示。我们如何进一步将其分成两个数组elements@him是的,最初的问题是关于Awk
FS
。请阅读更新并尝试使用
readarray
将每行分配给不同元素的建议。感谢John的回答,但数组分配有问题。它基本上只生成一个元素的数组,这个元素就是John的答案,但是数组赋值有问题。它基本上只生成一个元素为1的数组,然后在下一行生成abc def。我尝试初始化一个变量并在循环后递增,但它从未递增。我需要两个元素在数组中。@我明白了,我可能误解了你的初衷。我认为
readarray
是这项工作的最佳工具。请参阅更新的答案。我认为您正确理解了最初的意图,但您的代码生成的输出部分是正确的,我的意思是它以两行形式给出输出,但实际上只有一个元素以两行形式显示。我们如何进一步将其分成两个数组elements@him是的,最初的问题是关于Awk
FS
。请阅读更新并尝试