我试图从制表符分隔的文件中提取行,如果该文件在第4列中包含某个单词。例如,如果输入文件test.txt为:
chr 8 1234 abc ; xyz
chr 8 1255 abc
chr 8 987 xyz
chr 8 5467 jxyzm
以下代码仅正确输出第一行和第三行:
gawk -F"\t" ' { if($4 ~ /\<xyz\>/) print $0 } ' test.txt >> test.out
但是,当我尝试在bash脚本中循环运行此文件时,我的输出文件为空白。我使用的代码是:
while read id
do
OFILE=${ODIR}/${id}.txt
gawk -v id="$id" -F"\t" ' { if($4 ~ /\<id\>/) print $0 } ' ${IFILE} >> ${OFILE}
done < ${GFILE}
文件$ {GFILE}每行只有一个字,例如:
xyz
fg45
tre2y
我究竟做错了什么?
谢谢!
编辑为:
您可以很好地用来awk
从一个文件中读取搜索模式,并在另一个文件中找到匹配项,如下所示:
awk -F '\t' '
NR == FNR {
words[$1]
next
}
{
for (w in words)
if (index($4, w)) {
print > w ".txt"
break
}
}' "$GFILE" "$IFILE"
然后检查输出:
cat xyz.txt
chr 8 1234 abc ; xyz
chr 8 987 xyz
如果您真的想修复您的Shell脚本,那么这里是:
while read id; do
awk -F '\t' -v id="$id" '$4 ~ id' "$IFILE" > "$id.txt"
done < "$GFILE"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句