我有一个文件,我使用cut命令从该文件提取前三列,并将它们写入到一个数组中。
当我检查数组的长度时,结果是4。我需要数组只有3个元素。
我认为它将空格作为数组元素的分隔符。
aaa|111|ADAM|1222|aauu
aaa|222|MIKE ALLEN|5678|gggg
aaa|333|JOE|1222|eeeee
target=($(cut -d '|' -f1-3 sample_file2.txt| sort -u ))发布于 2015-06-17 03:02:45
在bash 4或更高版本中,使用带有进程替换的readarray来填充数组。因此,您的代码无法区分输出中分隔每一行的空格和"Mike Allen“中出现的空格。readarray命令将输入的每一行放入单独的数组元素中。
readarray -t target < <(cut -d '|' -f1-3 sample_file2.txt| sort -u)在bash 4之前,您需要一个循环来分别读取分配给数组的每一行。
while IFS='' read -r line; do
target+=("$line")
done < <(cut -d '|' -f1-3 sample_file2.txt | sort -u)发布于 2015-06-17 06:11:07
这应该是可行的:
IFS=$'\n' target=($(cut -d '|' -f1-3 sample_file2.txt| sort -u ))示例:
#!/bin/bash
IFS=$'\n' target=($(cut -d '|' -f1-3 sample_file2.txt| sort -u ))
echo ${#target[@]}
echo "${target[1]}"输出:
3
aaa|222|MIKE ALLEN发布于 2015-06-17 05:50:16
作为替代方案,使用臭名昭著的eval,
eval target=($(cut -sd '|' -f1-3 sample_file2.txt | sort -u | \
xargs -d\\n printf "'%s'\n"))https://stackoverflow.com/questions/30875929
复制相似问题