我有一个制表符分隔文件,有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)
任何人都可以帮我吗?提前谢谢。
答案 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