私は以下を試しています:
/dir1/textfile
/dir2/textfile
/dir3/textfile
「textfile」は常に同じ内容、つまり単純な数字(400)を持ちます。
これで、数値が異なるデータファイルがあります。各値は新しい行にあります(したがって、1行に1つずつ)。
私が望むのは、「textfile」(400)の値をデータファイルの値に置き換えることです。ただし、数値は私のデータファイルのエントリと一致する必要があります。
datafile
14
25
335
14
次のように書く必要があります。dir1/textfile
25
次のように書く必要があります。dir2/textfile
335
次のように書く必要があります。dir3/textfile
など...
私は遊んでいましたsed
が、これまでの解決策は見つかりませんでした。どんなアイデアがありますか?
ベストアンサー1
そしてawk
:
awk '{print $0 > "dir"NR"/textfile"}' datafile
NR
現在のレコード番号に展開されるため、各行はに保存されます。dir<line_number>/textfile
たとえば、最初の行はに保存され、dir1/textfile
2番目の行はに保存されますdir2/textfile
。
while
ファイルラインの高価な屋根ふきは不要で、次のことを行います。
i=1; while IFS= read -r line; do echo "$line" >dir"$i"/textfile; ((i++)); done <datafile
上記のシェル方式は単なるデモ方式に過ぎないので、誰もが従う必要がありますawk
。
コメントに基づいて編集:
400
すべてのsを希望の数字に置き換えるには、次の手順を実行しますdatafile
。
i=1; while IFS= read -r line; do sed "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile
ファイルを適切に編集するには、次の手順を実行します。
i=1; while IFS= read -r line; do sed -i "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile
バックアップソースファイル.bak
拡張子:
i=1; while IFS= read -r line; do sed -i.bak "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile