単語の先頭と末尾の文字を無視します。

単語の先頭と末尾の文字を無視します。

一部のフィールドは無視され、他のフィールドは検証されるようにスクリプトを介して特定の名前のflatdbを渡そうとします。現在これが私が持っているものです。

コメントと空白行を無視するには、thenステートメントで何を使用する必要がありますか?

編集:ファイルを読む例

Bob,Brown,Smith,39
#Alex,Jay,Jones,83

Justin,Michael,White,18
 James,Paul,Weis,54

編集:それから各名前を分けました。

IFS_SAVE=${IFS}
IFS=,

while read value1 value2 value3 value4
do
 echo "First name ${value1}"
 echo "Middle name ${value2}"
 echo "Last name ${value3}"
 echo "Age ${value4}"
done < ${1}

その後、ファイルの空行を無視しようとしました。

while read value1 value2 value3 value4
do
if [ -z ${value1} ]
 then
   echo "blank line exists"
 fi
done < ${1}

その後、ファイル内のコメント付き行を無視しようとしました。

while read value1 value2 value3 value4
do
if [ "${value1:0:1}" = "#" ]
 then
    echo "comment exists"
 fi
done < ${1}

ここからは実際には動作しませんでした。

フィールドが空白で始まるか終わるかを確認しようとしています。

while read value1 value2 value3 value4
do
if [[ ${value1} = *[[:space:]]* ]]
then
    echo "space exist"
fi
done < ${1}

編集:理想的な出力

First name Bob
Middle name Brown
Last name Smith
Age 39
First name Justin
Middle name Michael
Last name White
Age 39
 James,Paul,Wise,54 space exist

ベストアンサー1

readあるいは、何百もの不適切なツールを繰り返すのではなく、テキスト処理ツールを使用してテキストを処理します。echo

ここで表形式のデータを処理するための確実な方法は次のとおりですawk

awk -F, -v OFS='\n' '
  ! /^[#[:space:]]/ {
    print "First name "  $1, \
          "Middle name " $2, \
          "Last name "   $3, \
          "Age "         $4
  }' < you-file

条件は、または! /^[#[:space:]]/()で始まらない()行と一致します。!^#スペース特徴。または、/^[^#[:space:]]/以外の文字で始まる行を一致させることもできます。#スペース実際には、空白行もスキップするか、&& NF == 44つのフィールドを含まないスキップ行に追加されます。

または、期待される出力からそのまま先行または末尾のスペースがある行を渡します。

awk -F, -v OFS='\n' '
  /^[[:space:]]/ || /[[:space:]]$/ {print; next}

  /^[^#]/ && NF == 4 {
    print "First name "  $1, \
          "Middle name " $2, \
          "Last name "   $3, \
          "Age "         $4
  }' < you-file

(ここでは、POSIX文字クラスがサポートされていないため、最初に見つかると予想されるハードコードされた空白文字のリストとしてPOSIX互換性をawk想定してmawkいます。)[:space:]mawk

また、キャリッジリターン文字(CR //とも呼ばれる\r)は^M1文字として扱われます[:space:]。入力ファイルがUnixのように、行区切り文字がLFではなくCRLFであるMicrosoftオペレーティングシステムのテキストファイルである場合、各行は次のようになります。スペース特徴。dos2unixUnix形式に変換するには、まずファイルを実行する必要があります。

おすすめ記事