Как удалить последнюю запятую каждой строки csv с помощью linux

Мне нужно удалить последнюю запятую каждой строки.

У меня есть только один файл csv, который выглядит так:

98,N,N,N,N,S, 99,N,N,N,N,S, 101,Y,Y,Y,Y,S, 

У меня есть следующий скрипт, но он не работает:

 for fname in conv2015_10_LogicalComponent_CosProfile.csv do sed 's/.$//' $fname > tmp.tmp mv tmp.tmp $fname done 

6 Solutions collect form web for “Как удалить последнюю запятую каждой строки csv с помощью linux”

это должно сработать.

  for fname in conv2015_10_LogicalComponent_CosProfile.csv do cat $fname | sed 's/.$//' > tmp.tmp mv tmp.tmp $fname done 

Другим вариантом является использование опции «-i» для GNU Sed:

то вам нужно только сделать это:

 sed -i 's/.$//' filename 

Кроме того, чтобы выяснить, почему ». используется вместо «,». Это регулярное выражение, которое соответствует почти любому символу, поэтому, если есть «;» он также заменит это. Вы уточните, что вы можете изменить «. $» На «, $».

РЕДАКТИРОВАТЬ:

Я заметил, что вы упомянули, что у вас на самом деле есть пробелы в конце. Таким образом, этот код работает даже с пробелами. Проверено на Solaris.

 cat filename | sed 's/,[[:blank:]]*$//g > tmp.tmp mv tmp.tmp desired_filename 

Использование расширения параметра bash :

 while IFS= read -r line; do echo "${line%,}"; done <file.txt 

Использование sed :

 sed 's/,$//' file.txt 

Использование grep с помощью PCRE:

 grep -Po '.*(?=,$)' file.txt 

Он должен работать, если у вас нет пробелов в конце строки, особенно возврат каретки. Используйте cat -vet в файле, чтобы увидеть, где на самом деле находится конец строки (он отображается cat -vet $).

Вы можете упростить sed и mv в одну строку с опцией -i которая обновляет файл.

 sed -i 's/,$//' $fname 

Попробуй это

perl -pi -e 's/^(.*),(.+)$/$1/' conv2015_10_LogicalComponent_CosProfile.csv

(.*) будет соответствовать всем, пока последняя запятая и все последующие после этого (пробелы) не будут сопоставлены с (.+) и, наконец, заменят всю строку первым совпадением, которое хранится в $1 .

Я бы использовал vim или vi . Синтаксис такой же, как sed . Используйте «:» (двоеточие) для входа в командный режим и запустите %s/,$//g .

Поскольку это – разделенный файл, и вы хотите удалить последнее поле [empty], как насчет уменьшения количества полей в одном?

 $ awk 'BEGIN {FS=OFS=","} NF--' file 98,N,N,N,N,S 99,N,N,N,N,S 101,Y,Y,Y,Y,S 
  • Чтение файла Microsoft Excel
  • Как выбрать только числа из имен файлов в bash с помощью regex
  • Как объединить несколько файлов данных в один большой файл данных?
  • Чтение строки переменного размера и разбиение ее содержимого на отдельные строки с текстом
  • Как написать сценарий sed для удаления чисел из строки?
  • Определить динамически выделенный порт для OpenSSH RemoteForward
  • добавьте «#» в начале выбранных строк в файле
  • Как выполнить команду find с помощью набора строк из строки в текстовом файле
  • Шебанг, начинающийся с `//`?
  • Как связывать линии между шаблоном начала и конца?
  • Как слить текст буквенных строк с числовыми строками в оболочке?
  • Linux и Unix - лучшая ОС в мире.