[英]removing lines with special characters in awk
我有一個這樣的文本文件:
VAREAKAVVLRDRKSTRLN 2888
ACP*VRWPIYTACGP 292
RDRKSTRLNSSHVVTSRMP 114
VAREA*KAVVLRDRRAHV*T 73
在某些行的第一列中有一個“ *
”。 我想刪除帶有“ *
”的所有行。 這是預期的 output:
預計 output:
VAREAKAVVLRDRKSTRLN 2888
RDRKSTRLNSSHVVTSRMP 114
為此,我正在使用以下代碼:
awk -F "\t" '{ if(($1 == '*')) { print $1 "," $2} }' infile.txt > outfile.txt
此代碼未返回預期的 output。我該如何解決?
我該如何解決?
你做到了
awk -F "\t" '{ if(($1 == '*')) { print $1 "," $2} }' infile.txt > outfile.txt
通過做$1 == "*"
你是在問:第一個字段*
不是第一個包含*
嗎? 您可以使用索引function,如果找到則返回匹配的 position,否則返回 0。 讓infile.txt
內容為
VAREAKAVVLRDRKSTRLN 2888
ACP*VRWPIYTACGP 292
RDRKSTRLNSSHVVTSRMP 114
VAREA*KAVVLRDRRAHV*T 73
然后
awk 'index($1,"*")==0{print $1,$2}' infile.txt
output
VAREAKAVVLRDRKSTRLN 2888
RDRKSTRLNSSHVVTSRMP 114
請注意,如果您使用index
而不是模式/
... /
,則不必關心具有特殊含義的字符,例如.
. 請注意,對於您擁有的數據,您不必明確設置字段分隔符 ( FS
)。 重要'
在 GNU AWK
中不是合法的字符串定界符,你應該為此目的使用"
,除非你的意圖是召喚難以發現的錯誤。
(在 gawk 4.2.1 中測試)
使用您顯示的示例,請嘗試遵循awk
程序。
awk '$1!~/\*/' Input_file
OR以上將在條件不匹配時打印完整行,如果您只想打印匹配條件行的第一個和第二個字段,請嘗試以下操作:
awk '$1!~/\*/{print $1,$2}' Input_file
像這樣使用grep
刪除包含文字星號 ( *
) 的行。 請注意,應使用反斜杠 ( \*
) 對其進行轉義或放入字符 class ( [*]
) 以防止grep
將*
解釋為表示 0 個或多個字符的修飾符:
echo "A*B\nCD" | grep -v '[*]'
CD
此處,GNU grep
使用以下選項:
-v
:打印不匹配的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.