Удалить символы и цифры из определенной позиции в файле с разделителями-запятыми в unix

Вот как я это делаю: работает с кучей каталогов, которые мы хотим очищать каждую ночь.

find /h/$USER -maxdepth 1 -name "*.txt" -type f -mtime +30 -delete

Не могу сказать, лучший это или худший способ сделать это, но он работает годами без каких-либо проблем, на самом деле это набор очистителей мусора, все тот же синтаксис, никаких проблем, поэтому я думаю, что это достаточно хорошо для производства..

3
23.10.2019, 18:44
3 ответа

И метод grep:

$ egrep '^([^,]*,){6}\*,' file.txt 
jagan3,*,*,*,*,*,*,24,25,26
jagan5,*,*,*,*,*,*,24,25,26

^... соответствует нулевой строке, но только в начале строки

([^,]*,){6}... соответствует ровно 6 вхождениям произвольного текста, за которым следует запятая

\*,... соответствует буквальной звездочке, за которой следует запятая

Итак, чтобы переписать ваш файл, сохранив только эти строки:

$ egrep '^([^,]*,){6}\*,.*' file.csv > $$; mv $$ file.csv
0
27.01.2020, 21:20

В in.txtнаходится ваш входной файл, и вы хотите скопировать строки со звездочкой в ​​седьмом столбце в файл out.txt, вы можете использовать следующую команду grep:

grep -E '^(([[:alnum:]]+|[*]),){6}\*' in.txt > out.txt

Объяснение :вы сначала смотрите начало строки (^), за которой следуют шесть последовательных либо буквенно-цифровых символов, либо звездочки , за которой следует запятая((([[:alnum:]]+|[*]),); с {6}, определяющим количество повторений ), затем проверьте, является ли следующий символ звездочкой. Если да, соответствующая строка копируется в out.txt.

0
27.01.2020, 21:20

С помощью Miller , используя параметр -Iдля редактирования файла на месте:

mlr -I --csv --implicit-csv-header --headerless-csv-output filter '$7 == "*"' file.csv
1
27.01.2020, 21:20

Теги

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