#linux #bash #shell #csv #export-to-csv
Вопрос:
У меня есть файлы .txt, которые я беру как $item, а затем меняю кодировку с помощью
iconv -f $currentEncoding -t $targetEncoding "$item" -o "$item.tmp"
затем я снова сохраняю его в txt-файл, используя
mv "$item.tmp" "$item.txt";
затем я обрезаю несколько вещей в txt-файле и сохраняю его в виде csv-файла с
tr -d '"' < "$item.txt" > "$item.csv";
но в конце концов мои файлы будут храниться с расширением «*.txt.csv» — я хочу, чтобы они были просто .csv — кто-нибудь может мне помочь, пожалуйста, что я делаю неправильно или что я могу изменить. Спасибо
Ответ №1:
Бежать:
for f in *.txt.csv; do mv $f ${f/.txt./.}; done
Если переменная $f
содержит строку item.txt.csv
, выражение ${f/.txt./.}
удаляется .txt
из имени файла и выдает только строку item.csv
.
Внимание: если одно из имен файлов содержит пробелы, for
инструкция не будет работать должным образом.
Ответ №2:
Из того, что я понимаю, ваш товар в $уже имеет значение .txt. Итак, если вы перечисляете свои файлы после каждой команды, вы должны увидеть промежуточные файлы, такие как
xyz.txt.tmp
xyz.txt.txt
xyz.txt.csv
Поэтому, когда вы устанавливаете переменную item, просто сделайте ${item%%.*}, как показано ниже, и это должно работать так, как ожидалось.
item=xyz.txt
item="${item%%.*}"
echo $item
xyz