[英]Joining Line Breaks in FASTA file With Condition in SED/AWK/Perl one-liner
[英]AWK how to process multiple files and comparing them IN CONTROL FILE! (not command line one-liner)
我閱讀了所有類似問題的答案,但它們對我不起作用,因為我的文件不統一,它們包含多個控制標頭,在這種情況下,創建腳本比單行更安全,所有答案都集中在單行上。 理論上,單行命令應該可以轉換為腳本,但我正在努力實現:
我最終得到了這個:
BEGIN {
FS="\x01";
OFS="\x01";
RS="\x02\n";
ORS="\x02\n";
file1=ARGV[1];
file2=ARGV[2];
count=0;
}
/^#/ {
print;
count++;
}
# reset counters after control headers
NR=1;
FNR=1;
# Below gives syntax error
/^16/ AND NR==FNR {
a[$2];next; 'FNR==1 || !$2 in a' file1 file2
}
END {
}
谷歌搜索只給我命令行處理的結果,文檔在這方面也是沉默的。 這是否意味着它無法完成?
也許嘗試:
腳本.awk :
BEGIN {
OFS = FS = "\x01"
ORS = RS = "\x02\n"
}
NR==FNR {
if (/^16/) a[$2]
next
}
/^16/ && !($2 in a) || /^#/
注意括號:a 中!$2 in a
中的(!$2) in a
調用:
awk -F script.awk FILE2 FILE1
注意 FILE1 / FILE2 的順序顛倒了; 必須首先讀取 FILE2 以預填充查找表。
首先,對我的問題的簡短回答應該是“不可能”,如果有人仔細閱讀問題並完全了解 AWK,這是顯而易見的答案,我希望我早點知道,而不是浪費幾天時間嘗試編寫腳本。 此外,沒有最小的可重復示例(這對 TeX 組來說總是很痛苦) - 我需要完整的示例工作,如果它適用於 1 行,則不能保證它是否適用於 2 行並且我的行數是〜1.27億。
如果你仔細閱讀代碼,你就會知道什么是不工作的——我在評論部分放了什么給出了語法錯誤。 無論如何,正如@Daweo 建議的那樣,無法在模式部分使用邏輯運算符。 所以因為我們不需要在第一個文件中打印,所以整個技巧是在第二個括號中做條件:
awk -F, 'BEGIN{} NR==FNR{a[$1];next} !($1 in a) { if (/^16/) print $0} ' set1.txt set2.txt
假設在上面的例子中分隔符是逗號。 我不知道僅在 gnu awk 中關於多 RS 支持的假設來自哪里。 在 MacOS BSD awk 上,它的工作原理完全相同,但實際上RS="\x02\n"
是單個分隔符而不是兩個分隔符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.