2017-03-18 11 views
0

bashスクリプトを使用してソース入力ファイルを解析しています。私は区切られた出力をファイルで生成しています。区切られた出力の各フィールドに値が設定されていることを確認する方法が必要です。たとえばAA、BB、3,4,5,6,7,8は良いでしょうし、AA、3,4,5,6、、8は悪いです。 sed/awkや他のツールを使って行に空白のフィールドがあるかどうかを確認するにはどうすればよいですか?前もって感謝します!sedまたはawkで区切られた行の空白フィールドを確認する方法

+0

を使用してファイルから間違った行をgrepすることができますラインで - チェックと何?彼らは無視されるか、マークされるべきですか? – RomanPerekhrest

答えて

0

あなたは使用して、少なくとも1つの空のフィールドで行を印刷することができます。

awk -F, '{for (i=1;i<=NF;i++) if ($i=="") {print; next}}' 
  • -F,はフィールド上,

  • for (i=1;i<=NF;i++)反復するなど、フィールドの区切り文字を設定します

  • if ($i=="") {print; next}テスト対象のフィールドが空であればレコードを出力します。次のレコードへ

例:のbashで

% cat file.txt             
AA,BB,3,4,5,6,7,8 
AA,,3,4,5,6,,8 

% awk -F, '{for (i=1;i<=NF;i++) if ($i=="") {print; next}}' file.txt 
AA,,3,4,5,6,,8 
1

string='AA,,3,4,5,6,,8' 
if [[ $string =~ ^,|,,|,$ ]]; then 
    echo "error" 
else 
    echo "okay" 
fi 

出力:あなたは正規表現をテストすることができます

 
error 
0

再あなたの条件に合うpeatingグループ:

grep -E '^([^,]+,)*[^,]$' <<< "${AA,,3,4,5,6,,8}" 

Testcode:

for str in "AA,BB,3,4,5,6,7,8" "AA,,3,4,5,6,,8" ; do 
echo "===========" 
    echo "Testing >>>${str}<<<" 
    grep -Eq '^([^,]+,)*[^,]$' <<< "${str}" || echo "String incorrect" 
done 

あなたは空白のフィールドがある場合、私がチェックするにはどうすればよい*

grep -vE '^([^,]+,)*[^,]$' inputfile 
関連する問題