テキストファイルのタプルまたは名前のリストを繰り返します。

テキストファイルのタプルまたは名前のリストを繰り返します。

Linuxスクリプトには次のコマンドがあります。

#!/bin/bash

for i in "001 ARG1" "002 ARG2" "003 ARG3"
do
    set -- $i
    echo $1
    echo $2
done

001とARG1は本質的にタプルです。

forloopにロードできるテキストファイルにこれらのタプルを移動する方法はありますか?多すぎるので、このようなテキストファイルを保存します

ARG1
ARG2
ARG3

または

001 ARG1
002 ARG2
003 ARG3

スクリプトは次のとおりです。

for i in textfile.txt
do
    set -- $i
    echo $1
    echo $2
done

同じ結果が得られますか?

001 002を自動的に計算する方法はありますか? Pythonでcounter = 0とcounter + = 1を設定し、変数を割り当てる方法と同じです。

答え1

入力ファイルの2番目の例に示すように、ファイルの各行に2つのスペースまたはタブで区切られた単語を指定します。

while read -r word1 word2; do
    echo "$word1"
    echo "$word2"
done <textfile.txt

これは各行の最初の単語$word1と行の残りの部分を読みます$word2

入力は、リダイレクトを介してファイルから取得されるread複合コマンドの入力として提供されます。while

入力に文字が表示される場合、文字が特別な方法で解釈されないように-rするオプションがあります。read\

1行に1つの単語とカウンター:

counter=0
while read -r word; do
    counter=$(( counter + 1 ))
    echo "$counter"
    echo "$word"
done <textfile.txt

これにより、繰り返すたびに(読み込まれた各行ごとに)カウンタが1ずつ増えますtextfile.txt

ゼロで埋められた3桁のカウンタを取得するには、printf次のフォーマット文字列を使用してカウンタを出力します%.3d\n

printf '%.3d\n' "$counter"

...変えるecho "$counter"

意味の説明については、%.3d\nCライブラリ関数のドキュメントを参照してくださいprintfman 3 printfシェルに対応する関数はほとんど同じフォーマット文字列を使用します)。

関連情報