我打開一個文件並檢查列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