Удалить строку из CSV-файла bash, sed, bash - PullRequest
3 голосов
/ 15 апреля 2010

Я ищу способ удаления строк в нескольких файлах CSV, в bash, используя sed, awk или что-нибудь подходящее, где файл заканчивается на 0.

Итак, есть несколько CSV-файлов, их формат:

EXAMPLEfoo,60,6
EXAMPLEbar,30,10
EXAMPLElong,60,0
EXAMPLEcon,120,6
EXAMPLEdev,60,0
EXAMPLErandom,30,6

Таким образом, файл будет изменен на:

EXAMPLEfoo,60,6
EXAMPLEbar,30,10
EXAMPLEcon,120,6
EXAMPLErandom,30,6

Проблема, с которой я могу столкнуться, заключается в различении двойных цифр, заканчивающихся на ноль, и на самом 0.

Так есть идеи?

Ответы [ 6 ]

9 голосов
/ 15 апреля 2010

Используя ваш файл, что-то вроде этого?

$ sed '/,0$/d' test.txt 
EXAMPLEfoo,60,6 
EXAMPLEbar,30,10 
EXAMPLEcon,120,6 
EXAMPLErandom,30,6
5 голосов
/ 15 апреля 2010

Для этой конкретной проблемы sed идеально, как отмечали другие. Однако awk более гибок, то есть вы можете фильтровать по произвольному столбцу:

awk -F, '$3!=0' test.csv

При этом будет напечатана вся строка столбца 3, а не 0.

2 голосов
/ 16 апреля 2010

Я бы предпочел sed, но есть решение egrep (или: grep -e):

egrep -v ",0$" example.csv 
2 голосов
/ 15 апреля 2010
sed '/,[ \t]*0$/d' file
2 голосов
/ 15 апреля 2010

Вы также можете использовать awk,

$ awk -F"," '$NF!=0' file
EXAMPLEfoo,60,6
EXAMPLEbar,30,10
EXAMPLEcon,120,6
EXAMPLErandom,30,6

это просто говорит, проверьте последнее поле на 0 и не печатайте, если оно найдено

2 голосов
/ 15 апреля 2010

используйте sed для удаления только строк, заканчивающихся на ", 0":

   sed  '/,0$/d' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...