2017-04-12 9 views
0

awkを使用すると、手動で各列を指定しなくても、すべてのフィールドがnullでないファイルの行を出力するにはどうすればよいですか?awkで完全なケースを見つける

A||B|X 
A|A|1| 
|1|2|W 
A|A|A|B 

foo.dat

を返す必要があります:私たちが行うことができます。この場合

A|A|A|B 

を:

awk -F"|" -v OFS="|" '$1 != "" && $2 != "" && $3 != "" && $4 != "" { print }' foo.dat 

しかし、指定せずにこれを行う方法があります各列?

答えて

2

あなたはすべてのフィールドをループし、フィールドのいずれかが空の場合は、レコードをスキップすることができます:「フィールドiが空でない場合は、」

$ awk -F'|' '{ for (i=1; i<=NF; ++i) { if (!$i) next } }1' foo.dat 
A|A|A|B 

if (!$i)であり、1は、の略です「印刷現在の行のいずれのフィールドに対してもnextが実行されなかった場合にのみヒットします。 awkでは

0

別:

$ awk -F\| 'gsub(/[^|]+(\||$)/,"&")==NF' file 
A|A|A|B 

print記録NF|終端(非空で、| -excluding)文字列が存在する場合。

0
awk '!/\|\|/&&!/\|$/&&!/^\|/' file 

A|A|A|B 
関連する問題