Text-Processing
刪除每列中包含 NA 的行
我有一個製表符分隔的文件,如下所示:
gene v1 v2 v3 v4 g1 NA NA NA NA g2 NA NA 2 3 g3 NA NA NA NA g4 1 2 3 2
每行中的欄位數是固定且相同的。我想從上面的文件中刪除那些行,其中從第 2 列到最後一行的每一行的所有欄位都是 NA。然後輸出應如下所示:
gene v1 v2 v3 v4 g2 NA NA 2 3 g4 1 2 3 2
與
awk
:awk '{ for (i=2;i<=NF;i++) if ($i!="NA"){ print; break } }' file
循環遍歷從第二個欄位開始的欄位,如果
NA
找到不包含的欄位,則列印該行。然後打破循環。
使用 GNU sed
sed -e '/g[0-9]\+\(\s*NA\s*\)\+$/d' filename
簡短說明:
g[0-9]\+\(\s*NA\s*\)\+$
是一個正則表達式匹配g
,後跟至少一個數字,然後是任意數量的NA
s,其間有可選空格,直到行尾。
sed -e '/<regex>/d'
刪除所有匹配的行<regex>
具有相同含義的更標準的正則表達式是:
sed -Ee '/g[0-9]+([[:space:]]*NA[[:space:]]*)+$/d' filename