行数が異なり、*.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