我有以下代码
tasks=$(cut ~/.todo/data -f3)
数据由
组成1331956800 29 task 5
1361077200 28 task 3
1363554894 26 task 1
1363555119 30 baller
出于某种原因,我可以使用此方法提取前两列,但第三列似乎无法正常工作。我尝试在IFS='\n'
之前设置tasks=
,但它仍然拒绝工作。
列之间有标签,第3列只有空格。
我想要
${tasks[0]} = "task 5"
${tasks[1]} = "task 3"
...
${tasks[3]} = "baller"
这是cut的输出
$ cut ~/.todo/data -f3
task 5
task 3
task 1
baller
答案 0 :(得分:1)
简单的bash解决方案。
tasks=()
while IFS=$'\t' read _ _ t; do
tasks+=("$t")
done <<-!
1331956800 29 task 5
1361077200 28 task 3
1363554894 26 task 1
1363555119 30 baller
!
for t in "${tasks[@]}"; do
echo "$t"
done
答案 1 :(得分:0)
awk会在空格或制表符上拆分列(这可能不仅仅是其中之一),而且它更适合具有混合列分隔符的文件。
readarray a < <(awk '{print "\047" $3, $4 "\047"}' file.txt)
for i in ${!a[@]}; do echo "index[$i]=${a[i]}"; done
修改:你的问题在线程中增长了,所以
readarray a < <(
awk '{$1=$2=""; sub(/^ +/, ""); print "\047" $0 "\047"}' ~/.todo/data
)
\047
是'