0

ドキュメントの最初の行のパターンを一致させる必要があります。フィールド区切り文字は「:」で、パターンに従わない場合に間違ったメッセージを取得したい。スペースがあるフィールドとないフィールドを区別する必要があります。私は次のようなものを使用します:

awk -F ":" '{if (($1 ~/^@[A-Za-z0-9]*/) && ($2 ~/[0-9]*/) && ($3 ~/[0-9]*/) && ($4 ~/[0-9]*/) && ($5 ~/[0-9]+/)){print "ok"} else { print "no"}}'  

私は「OK」を取得します

$1 

"AAABBBF43T5Y" 

たとえそうであっても

"AABBBF 43T5Y"

$1 または他のフィールドにスペースがある場合、「いいえ」を取得する必要があります。

助言がありますか?

OK、それは少し混乱しています。

私はこのようなものを持っています:

@HWUSI-EAS100R:6:73:941:1973#0/1

そして、各フィールドをチェックしたいと思います。最初のものには任意の文字を含めることができ、2 番目のものには数字のみを含めることができます。ただし、空白は許可されていないため、次のようなものは正しくありません。

@HWUSI-E AS100R:6:73:9 41:1973#0/1

フィードバックをお寄せいただきありがとうございます。混乱を招いて申し訳ありません。

4

1 に答える 1

2

あなたの例と言葉遣いは非常に紛らわしいですが、最初のフィールドにスペースが含まれているかどうかを確認したいようです。次のようなことができます。

$ cat file
AABBBF43T5Y:f2:f3
AABBBF 43T5Y:f2:f3

$ awk -F: '$1~/ /{print "FAIL LINE: ",NR;next}{print "PASS LINE:",NR}' file
PASS LINE: 1
FAIL LINE: 2

条件をチェックして出力を出力したいだけの場合は、これをより簡単に書くことができます。それ以外のことをしたい場合は、前のブロック構造を簡単に変更できます。

$ awk -F: '{print $1~/ /?"FAIL":"PASS","LINE:",NR}' file
PASS LINE: 1
FAIL LINE: 2

問題を明確に説明し、代表的な入力ファイルと予想される出力を投稿すると、より良い回答が得られます。

編集:

正規表現の一致がアンカーさ^$、許可された文字のみが含まれている限り、スペースは受け入れられません。

$ cat file
@HWUSI-EAS100R:6:73:941:1973#0/1
@HWUSI-E AS100R:6:73:9 41:1973#0/1

$ awk -F: '$1~/^@[a-zA-Z0-9-]*$/&&$2~/^[0-9]*$/{print "PASS",NR;next}{print "FAIL",NR}' file
PASS 1
FAIL 2

したがって$2~/^[0-9]*$/、正規表現が一致し、正規表現が次の場合にのみ true と評価されます。

^      # Match start of field
[0-9]* # Zero or more digits
$      # The end of the field

これにより、空白のフィールドまたは数字のみのフィールドが許可されます。

于 2013-04-08T12:04:05.070 に答える