フォルダ内のすべてのcsvファイルのすべての行の末尾にファイル名(拡張子なし)を追加したいと思います。すべてのファイルに同じヘッダーがあります。
私のフォルダにa.csvとb.csvという2つのファイルがあるとしましょう。
a.csvには次のものが含まれます(最初の行はヘッダーです)。
num1,num2,num3
1,2,3
b.csvには次のものが含まれます(最初の行はヘッダーです)。
num1,num2,num3
4,5,6
.csvファイルが必要です(最初の行はヘッダーです)。
num1,num2,num3,filename
1,2,3,a
b.csvファイルが必要です。 (最初の行はヘッダーです。)
num1,num2,num3,filename
4,5,6,b
Unixではどうすればいいですか?
ベストアンサー1
for file in *.csv
do
filename=${file%.csv}
sed -i -e "1s/\$/,filename/; 2,\$s/\$/,$filename/" "$file"
done
*csv
現在のディレクトリの各ファイルを繰り返します。- 末尾を削除してファイル名テキストを準備する
.csv
-i
sedを使用してファイルを適切に編集します。- 1行目のみ行末を検索し、text(escaped
$
)に置き換えます,filename
。 - 2行目からファイルの終わり(
$
)まで、行の終わり($
)を検索してコンマと準備されたファイルの名前に置き換えます。
- 1行目のみ行末を検索し、text(escaped