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\n
Cライブラリ関数のドキュメントを参照してくださいprintf
(man 3 printf
シェルに対応する関数はほとんど同じフォーマット文字列を使用します)。