Обрезка .csv, удаление его дубликата и сопоставление с исходным .csv без обрезки - PullRequest
0 голосов
/ 14 апреля 2020

У меня проблема с .csv в bash.

У меня есть .csv как показано ниже:

dog,1, yellow, ball
cat, 2,green, skate
dog, 3 , yellow,   ball  
cat  , 4   , green, skate
dog, 5, yellow, ball
cat   , 6, green, skate

Где ключ состоит из столбцов, 1, 2 и 4. Сначала я должен сделать копию этого .csv со всеми обрезанными строками (без пробелов), а затем удалить все дублированные строки, но сопоставить строки с исходным .csv с исходными пробелами.

Я пытаюсь как:

awk '{sub(/^ +/,""); gsub(/, /,",")}1' input.csv >> temp.csv #to do the trim

Это должно привести к:

dog,10,yellow,ball
cat,10,green,skate
dog,10,yellow,ball  
cat,10,green,skate
dog,10,yellow,ball
cat,10,green,skate

awk -F, 'dup[$1,$2,$4]++' temp.csv #to get the duplicated

, что приведет к:

dog,10,yellow,ball
cat,10,green,skate

Но я запас в отображение на оригинальную часть .csv. Пожалуйста, обратите внимание, что оригинал не является «обычным» интервалом, ожидаемый результат - это только первые две строки. Когда мне нужно получить ожидаемый результат:

dog,10, yellow, ball
cat, 10,green, skate

1 Ответ

1 голос
/ 14 апреля 2020

Просто запустите этот исходный файл с пробелами:

$ awk -F'[[:space:]]*,[[:space:]]*' '{orig=$0; gsub(/^[[:space:]]+|[[:space:]]+$/,"")} !seen[$1,$2,$4]++{print orig}' file
dog, 10, yellow, ball
cat, 10, green, skate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...