コマンドに別のファイルのテキストを使用する

コマンドに別のファイルのテキストを使用する

ファイルからデータを抽出し、正しい形式で出力するための実用的な方法を見つけようとしています。

たとえば、data.txt というファイルがあり、その内容は次のようになっているとします。

abc 123
def 456

次に、スクリプトを使用してデータを解析し、次のように表示します。

first abc second 123
third def fourth 456

これまでに作成したものは次のとおりです。

#!/bin/sh
#

for i in data.txt; do while read -r a b; do
    echo "First $a second $b"
    echo "third $a fourth $b"

done < data.txt
done

出力は次のようになります。

First abc second 123
third abc fourth 123
First def second 456
third def fourth 456

つまり、data.txt の各行を読み取ってそれを一度適用し、次の行に進むのではなく、同じデータを次の echo コマンドに適用し続け、次の行に進みます。おそらく単純なことを見落としているのだと思いますが、長い一日でした。:)

答え1

1回のループで2回の読み取りを実行できる

#!/bin/sh

while read -r a b && read -r c d; do
  echo "First $a second $b"
  echo "third $c fourth $d"
done < data.txt

実際のアプリケーションによっては、xargsex も検討する必要があるかもしれません。

xargs -L2 /bin/printf 'First %s second %s\nthird %s fourth %s\n' < data.txt

関連情報