0

我有以下代码

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
4

2 回答 2

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
于 2013-03-18T13:55:49.497 回答
0

在空格或制表符上拆分列(可以不仅仅是其中之一),它更适合具有混合列分隔符的文件。

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

是八进制 ASCII 表示'

于 2013-03-17T22:27:43.660 回答