whileループを使用してBashスクリプトでファイルを読み取るさまざまな方法
この記事では、whileループを使用してbashスクリプトでファイルを読み取る方法について説明します。 。ファイルの読み取りは、プログラミングの一般的な操作です。さまざまな方法と、どの方法を使用するのがより効率的かを理解している必要があります。 bashでは、1つのタスクをさまざまな方法で実行できますが、タスクを実行するための最適な方法は常に存在するため、それに従う必要があります。
whileループを使用してファイルの内容を読み取る方法を確認する前に 、whileループがどのように機能するかについての簡単な入門書。 whileループは条件を評価し、条件が真の場合に指定されたコードのセットを繰り返し処理します。
while [CONDITION] do code blockdone
whileループを分解してみましょう 構文。
- whileループ whileキーワードで始まり、その後に条件が続く必要があります。
- 条件 []で囲む必要があります または[[]] 。ループを実行するには、条件が常にtrueを返す必要があります。
- 実際のコードブロックは、実行の間に配置されます および完了 。
NUMBER =0while [[$ NUMBER -le 10]] do echo "Welcome $ {NUMBER} times"((NUMBER ++))done
これは非常に単純な例で、ループ NUMBERまで実行されます 10以下 エコーステートメントを出力します。
while 読み取りを使用します ファイルの内容を1行ずつ読み取るコマンド。以下は、 while の構文です。 および読む コマンドが組み合わされます。これで、ファイルを入力として渡すさまざまな方法があり、それらすべてが表示されます。
#SYNTAXwhile read VARIABLEdo codedone
Linuxでの配管
通常、catコマンドを使用して、ターミナルからファイルの内容を表示します。また、catコマンドの出力をパイプ処理します grep、sortなどの他のコマンドに。
同様に、catコマンドを使用します ここでファイルの内容を読み取り、 whileにパイプします ループ。デモンストレーションには、 / etc / passwdを使用しています ファイルですが、このファイルをいじることはお勧めできません。このファイルのバックアップコピーを取り、必要に応じて試してみてください。
cat / etc / passwd | LREADを読んでいる間doecho$ {LREAD} done
上記のコードが送信されたときに何が起こるかを分析してみましょう。
- cat / etc / passwd ファイルの内容を読み取り、パイプを介して入力として渡します。
- 読む コマンドは、catコマンドからの入力として渡された各行を読み取り、それを LREADに格納します。 変数。
- 読む コマンドは、 EOLまでファイルの内容を読み取ります 解釈されます。
ヘッド、テールなどの他のコマンドを使用して、whileループにパイプすることもできます。
head -n 5 / etc / passwd | LREADを読んでいる間doecho$ {LREAD} done
Linuxでの入力リダイレクト
ファイルのコンテンツをwhileループにリダイレクトできます 入力リダイレクト演算子(<)
を使用する 。
読み取り中LREADdoecho$ {LREAD} doneファイル名を変数に保存して、リダイレクト演算子を介して渡すこともできます。
FILENAME ="/ etc / passwd" while read LREADdo echo $ {LREAD} done <$ {FILENAME}スクリプトの引数としてファイル名を渡すこともできます。
読み取り中LREADdoエコー${LREAD}完了<$1| head -n 5内部フィールドセパレーター
さまざまな種類のファイル形式( CSV )を使用できます 、 TXT 、 JSON )そして、カスタム区切り文字に基づいてファイルの内容を分割したい場合があります。この場合、「内部フィールドセパレーター(IFS)」を使用できます。 」を使用してファイルの内容を分割し、変数に保存します。
それがどのように機能するかを示しましょう。 / etc / passwdをご覧ください コロンが含まれるファイル
(:)
区切り文字として。これで、各単語を1行から分割して、個別の変数に格納できます。以下の例では、 / etc / passwdを分割しています。 区切り文字としてコロンを使用し、各分割を異なる変数に格納するファイル。
while IFS =":" read A B C D E F Gdo echo $ {A} echo $ {B} echo $ {C} echo $ {D} echo $ {E} echo $ {F} echo $ {G} doneスクリーンショットのサイズを考慮して、上のスクリーンショットに1行に分割して表示しました。
Linuxの空の行
ループしても空の行は無視されません ファイルの内容を介して。これを実証するために、以下の内容のサンプルファイルを作成しました。 4行といくつかの空の行があり、先頭の空白、末尾の空白、2行目のタブ文字、およびいくつかのエスケープ文字( \ n および\t 。
読み取り中にLREADdoecho$ {LREAD} done結果を参照してください。空白行は無視されません。また、注目すべき興味深い点は、読み取りによって空白がどのようにトリミングされるかです。 指図。ファイルの内容を読み取るときに空白行を無視する簡単な方法は、
-z
でテスト演算子を使用することです。 文字列の長さがゼロかどうかをチェックするフラグ。同じ例を繰り返しますが、今回はテストオペレーターを使用します。LREADdoを読んでいる間if[[! -z $ LREAD]]次に、echo $ {LREAD} fidone出力から、空の行が無視されていることがわかります。
エスケープ文字
\n
のようなエスケープ文字 、\t
、\c
ファイルの読み取り時に印刷されません。これを示すために、エスケープ文字がほとんどない同じサンプルファイルを使用しています。読み取り中にLREADdoecho$ {LREAD} done出力から、エスケープ文字の意味が失われ、 nのみであることがわかります。 およびt
\n
の代わりに印刷されます および\t
。-r
を使用できます バックスラッシュの解釈を防ぐため。while read -r LREADdo echo $ {LREAD} doneこの記事は以上です。フィードバックやヒントがありましたら、ご連絡をお待ちしております。あなたのフィードバックは、私たちがより良いコンテンツを作成するのに役立つものです。読み続け、サポートし続けてください。
-
JavaScriptのフローチャートを使用してwhileループを表示するにはどうすればよいですか?
whileの目的 ループとは、式である限り、ステートメントまたはコードブロックを繰り返し実行することです。 本当です。式がfalseになると 、ループは終了します。 JavaScriptのフローチャートを使用してwhileループを表示する方法を見てみましょう-
-
Excel で CSV ファイルを読み取る方法 (4 つの最速の方法)
Excel での作業中に CSV を処理する必要が生じることがよくあります。 ファイル。これは、列を保持したまま Excel で CSV ファイルを開く可能性があります 、 CSV の変換 ファイルを Excel ファイルに変換したり、接続を作成したりします。ただし、 CSV を読み取ったり開いたりすると、 Excel のファイルは、そのような種類のファイル内のテキストベースのデータに対して Excel の機能を利用するために不可欠です。この記事では、 CSV を読み取る 4 つの方法について説明します。 適切な説明を含む Excel ファイル。したがって、ファイルの方法を調整できます