我有一个文件,我使用cut
命令从中提取前三列,然后将它们写入数组。
当我检查阵列的长度时,它给了我四个。我需要数组只有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 ))
答案 0 :(得分:2)
在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)
答案 1 :(得分:1)
这应该有效:
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
答案 2 :(得分:0)
作为替代方案,使用臭名昭着的eval
,
eval target=($(cut -sd '|' -f1-3 sample_file2.txt | sort -u | \
xargs -d\\n printf "'%s'\n"))