bash - 从 awk 生成的制表符分隔文件填充关联数组的疑难解答
问题描述
我使用samtools
and生成了一个制表符分隔的文件awk
。我正在尝试使用制表符分隔文件填充关联数组。然后,关联数组的键和值将在函数中用于下游分析。
当尝试使用代码填充关联数组时,文件行被读入$queryid
并且制表符被转换为空格。除了下面显示的内容之外,IFS=\
我还尝试过运行代码。IFS="\t"
samtools view $1 "NA" | awk 'BEGIN { OFS = "\t" } ; { print $1, $4 }' > "$3/$1_ReadStarts.txt"
declare -A Readstart
while IFS= read queryid startpos; do
echo $queryid >> "$3/test.txt"#this line was added for troubleshooting
Readstart[$queryid]=$startpos
done < "$3/$1_ReadStarts.txt"
输入文件 ( ReadStarts.txt
) 的一部分从生成samtools
并awk
如下所示。应该是键或数组的$queryid
(显示在 中)的一部分如下所示。test.txt
它包含ReadStarts.txt
应该存储在的第二列$startpos
。
ReadStarts.txt
NB501950:166:HVN2GBGXB:3:21607:13181:3898 13397
NB501950:166:HVN2GBGXB:3:23607:24238:3455 16224
NB501950:166:HVN2GBGXB:3:23402:1402620:test.txt
NB501950:166:HVN2GBGXB:3:21607:13181:3898 13397
NB501950:166:HVN2GBGXB:3:23607:24238:3455 16224
NB501950:166:HVN2GBGXB:3:23402:1340220:968840220:66
解决方案
您的任何IFS
设置都不正确。IFS=
是取消设置变量的方法,而不是将其设置为等于空格。事实上,你根本不需要设置IFS
,因为它默认为空格、制表符和换行符。
declare -A Readstart
while read -r queryid startpos; do
echo "$queryid"
echo "$startpos"
Readstart[$queryid]="$startpos"
done < "stackOverflow.txt"
使用您提供的示例文件为我工作。
如果您以后需要知道如何设置IFS
:
- 新队:
IFS=$'\n'
- 标签:
IFS=$'\t'
- 空间:
IFS=' '
推荐阅读
- html - 在 SVG 中,你可以重用一个常见的线性渐变,但改变 CSS 的颜色吗?
- java - 在不使用 split() 的情况下拆分不知道其长度的字符串
- entity - DDD 在一个聚合中的实体之间以一对多而不是一对多的聚合边界
- java - 考虑在你的配置中定义一个 's.safontseva.mynotes.repository.UserRepository' 类型的 bean
- python - 不能第二次输入
- java - Java 11:获取“空 [客户端] 证书链”而不是“空 [服务器] 证书链”
- input - 如何在 Makefile 中只读取一个字符
- python - 修改交互式 python 脚本以在开始时接受参数
- flutter - 颤振任务:android_intent:compileDebugJavaWithJavac FAILED
- macos - macOS sendfile 将 errno 设置为 45