簡體   English   中英

刪除 awk 中帶有特殊字符的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM