Если я правильно понял ОП, то "идеальным" решением является (строка 1 без расширения, остальные с расширением ), с использованиемGNU awk
:
gawk -F, -i inplace \
'BEGIN {
OFS=",";
}
{
if(FNR==1)
name = gensub(/^(.*)\..*/, "\\1", "g", FILENAME);
else
name = FILENAME;
print $0, name;
}' *.csv
-F
, дескриптор и назначение OFS=","
устанавливают разделитель полей ввода и вывода -на ,
.
-i inplace
означает обрезать текущую запись в файле и вместо этого записывать текущий вывод в файл.
Встроенный gensub -сохраняет имя файла без расширения в имени, а оператор печати печатает желаемую измененную запись.
for file in *.csv
do
filename=${file%.csv}
sed -i -e "1s/\$/,filename/; 2,\$s/\$/,$filename/" "$file"
done
*csv
файл в текущем каталоге, .csv
-i
в месте -, с помощью :$
), текстом ,filename
. $
), найдите и замените конец строки($
)запятой и подготовленным именем файла