如何使用awk获取数组中的整行(每个列在单独的数组元素中)

时间:2015-01-24 18:44:45

标签: shell awk

我有一个制表符分隔文件,有17列和大约4000行。有些列的空格为String个值。我想在数组中取整行,以便该行的每个列值(包括空格)进入array的单独元素。我尝试通过awk命令执行此操作。但它无法正常工作

arr=( $(awk -v var="$var" -F $'\t' 'BEGIN {OFS=FS} ( ($2 == var) && ($3!="\.") ){print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17}' c01_trinotate_annotation_report_e_0.001.xls)

任何人都可以帮我吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

eval arr=( $(awk -v var="$var" -F $'\t' 'BEGIN {OFS=FS} ( ($2 == var) && ($3!="\.") ){for (i=1; i<=17; i++) {printf "\"%s\" ", $i;}}' c01_trinotate_annotation_report_e_0.001.xls))

有两个问题。首先,包含空格的字符串必须用引号括起来。其次,引用需要通过eval运行才能正确处理报价。

答案 1 :(得分:0)

如果你想迭代一个文件,并将每一行视为一个bash数组,为什么不用bash而不是awk呢?

while IFS=$'\t' read -ra row; do
    if [[ ${row[1]} == $var ]] && [[ ${row[2]} != "." ]]; then
        # do something with "${row[@]}"
    fi
done < file