Добавить поле заголовка , и имя файла в конце строк данных, для всех файлов CSV в папке [закрыто]

-1
23.07.2017, 07:31
2 ответа

Если я правильно понял ОП, то "идеальным" решением является (строка 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 -сохраняет имя файла без расширения в имени, а оператор печати печатает желаемую измененную запись.

2
28.01.2020, 05:06
for file in *.csv
do
  filename=${file%.csv}
  sed -i -e "1s/\$/,filename/; 2,\$s/\$/,$filename/" "$file"
done
  1. Перебрать каждый *csvфайл в текущем каталоге,
  2. подготовьте текст имени файла, удалив завершающий элемент.csv
  3. отредактируйте файл с помощью sed, -iв месте -, с помощью :
    1. только в строке 1, найдите и замените конец строки (, экранированный $), текстом ,filename.
    2. в строках со 2 по конец файла ($), найдите и замените конец строки($)запятой и подготовленным именем файла
3
28.01.2020, 05:06

Теги

Похожие вопросы