我打开一个文件并检查列1 & 8中的项目是否与特定规格匹配。如果是,则将输出写入文件x。如果列1中的项目与规格匹配,但列8与规格不匹配,请将输出写入文件y。我定义了多个变量(awk -v v = $ var,f1 = $ file,f2 = $ output),我相信我如何引用f1 & f2是问题所在。如果我删除引号:Awk:使用多个定义的变量打印到不同的文件
print $0 >> f2
awk: cmd. line:5: (FILENAME=- FNR=2) fatal: expression for `>>' redirection has null string value
如果我把在$:
print $0 >> $f2
我结束了一群与我不想怪名字的文件,并将这些文件怎么办想要是空的(除了回显线)。
如果我把“”:
print $0 >> "f2"
我想几乎是空的文件,并创建一个名为F2的文件。
#!/bin/bash
output="output.txt"
echo -e "C1\tSeqID\tAminoAcid\tCD1\tCD2\tCD3\tGene\tEnvironment\tFilename" > $output
inputFile="input.txt.gz"
for var in A B C D E F G H I J K L
do
file=$var".txt"
echo -e "C1\tSeqID\tAA\tCD1\tCD2\tCD3\tGene\tEnvironment\tFilename" > $file
#---Wrong, forgot to catch $8 != v
#zcat $inputFile | awk -v v=$var '{
# if ($8 == v && ($1 == "V1" || $1 == "V2" || $1 == "V3" || $1 == "V4" || $1 == "V5" || $1 == "V6" || $1 == "V7" || $1 == "V8" || $1 == "V9" || $1 == "V10"))
# print $0
# }' | tee -a $file $output
zcat $inputFile | awk -v v=$var,f1=$file,f2=$output '{
if ($8 == v && ($1 == "V1" || $1 == "V2" || $1 == "V3" || $1 == "V4" || $1 == "V5" || $1 == "V6" || $1 == "V7" || $1 == "V8" || $1 == "V9" || $1 == "V10"))
print $0 >> "file"
else if ($8 != v && ($1 == "V1" || $1 == "V2" || $1 == "V3" || $1 == "V4" || $1 == "V5" || $1 == "V6" || $1 == "V7" || $1 == "V8" || $1 == "V9" || $1 == "V10"))
print $0 >> "f2"
}'
gzip $file
done
gzip $output
我可以运行循环,并有两个单独的awk命令写入不同的文件。但是,它是一个非常大的文件(4G压缩),使用我目前的方法(或类似的方法)效率更高。任何指导如何引用第二个变量的第二个&非常感谢。
啊。谢谢@Ed Morton。这似乎是工作无错误和写入f1,但是,F2仍然是空的(除了回声线)。我会看到它是如何完成的,如果仍有问题,我会提出一个新问题。再次感谢你。 – cer 2014-11-22 22:09:42
它工作完美。谢谢埃德。 – cer 2014-11-22 22:13:33