Intereting Posts
Есть ли способ идентифицировать путь приложения для процесса, который пытается получить доступ к Интернету в дистрибутиве Linux? Как добавить одноразовые пакеты в конфигурацию декларативно? Извлечь одно вхождение шаблона из файла top / ps / mpstat, показывающий разный выход восстановить хромированные / firefox окна в исходное рабочее пространство / рабочий стол Создание репозитория yum для сетевых машин Много трафика между серверами – откуда оно взялось? Извлеките адреса, разделенные точкой с запятой, и напечатайте каждый адрес в строке Backspace, действующее как Enter in Bash Как удалить символ и пробел из строки Поврежденный USB-ключ нельзя смонтировать или отформатировать Перезагрузка IPtables при перезагрузке, как мне сказать, что вызывает это Как добавить строку в первый столбец файла матрицы? Как заставить TCP-пакеты использовать конкретную сетевую карту Как исправить как слишком много, так и немного пробелов?

Удалите определенную часть строки

У меня есть файл csv, который имеет много строк временных меток в следующем формате HH: MM: SS: MS
Например:

00.00.07.38 00.00.08.13 00.00.08.88 

Этот час не имеет отношения ко мне, поэтому я хотел бы его отрезать. Как удалить HH из каждой строки файла с помощью bash.

Я могу читать строки за строкой из файла

 while IFS=, read col1 do #remove HH from every line #awk -F '[.]' '{print $1}' <<< $col1 #only prints one portion of time #echo $col1 | cut -d"." -f2 | cut -d"." -f3 | cut -d"." -f4 done < $file 

Я играл с awk и cut но смог распечатать определенную позицию ex HH и т. Д.

Но как удалить только HH из строки без создания нового файла?

Просто используйте sed :

sed -i.bak 's/[0-9]\{2\}.//' myfile

Это приведет к удалению двух стартовых цифр, за которыми следует период, и заменит ваш файл, сохранив оригинал в качестве резервной копии ( myfile.bak ).

Возможно, это не лучшее решение, но оно работает

Я просто создаю tempfile, который позже переименовал в исходное имя файла.

 function fixTime() { file="zipstream_test/timeLog.csv" tmpFile="zipstream_test/timeTmp.csv" #Remove HH from file, ie remove first 3 chars sed 's/^.\{3\}//g' $file > $tmpFile rm $file mv $tmpFile $file } fixTime 

Вы были почти там со своим сценарием:

 file=filename while IFS=. read hmsn do echo "$m.$s.$n" done < "$file" 

Использование IFS как точки ( . ) Позволяет считывать раздельные данные ( < "$file" ) по частям. Части присваиваются h, m, s и n. Затем мы просто печатаем нужные детали. Фактически, более простым решением будет:

 file=filename while IFS=. read hm do echo "$m" done < "$file" 

Переменная h принимает первую часть, переменная m принимает остальное, а затем просто печатает ее.