番号付きファイルを繰り返し、ファイルの各行に同じ番号を持つ別のファイルの内容を追加します。

番号付きファイルを繰り返し、ファイルの各行に同じ番号を持つ別のファイルの内容を追加します。

行数が異なり、*.txt ファイルの数が等しい番号が付いた*.csvファイルがたくさんあります。 1.txtファイルの内容を1.csvファイルの各行に追加し、2.txtファイルの内容を2.csvファイルの各行に追加したいと思います。各 *.txt ファイルには 1 行だけが含まれます。

私が試したこと:

for i in {1..2}; do for j in {1..2}; do perl -i -p -e "s/^(.+?)$/\1<content of $j.txt>/g" ./$i.csv; done; done

しかし、明らかにこれはうまくいきません。

はい(初期ケース):

1.csv
  line 1
  line 2
  line 3

2.csv
  line 1
  line 2

1.txt
  yyy

2.txt
  zzz

結果(必要):

1.csv
  line 1yyy
  line 2yyy
  line 3yyy

2.csv
  line 1zzz
  line 2zzz

1.txt
  yyy

2.txt
  zzz

どんな助けでも大変感謝します。

ベストアンサー1

おそらくPerlを拡張してみてください。

for f in ./*.csv; do 
  perl -i -lpe 'BEGIN{$x = shift @ARGV} s/$/$x/' "$(<"${f%.csv}.txt")" "$f"
done

(演算子がksh / zsh / bashであると仮定し、シェルがそれをサポートしていない場合は$(<file)次のように置き換えます)。$(cat<file)

与える

$ head ./*.csv
==> ./1.csv <==
  line 1yyy
  line 2yyy
  line 3yyy

==> ./2.csv <==
  line 1zzz
  line 2zzz

しかし、実際に正規表現の置換は必要ありません。s/$/$x/単純な文字列接続で置き換えることを検討できます。$_ .= $x

おすすめ記事