Вы можете сделать это довольно просто с помощью awk
, и это substr
команда обработки строк, например,
$ awk -F, -v OFS=',' '{$3 = substr ($3, 7)} 1' file
abcde,12345,12345,aaaaaaa
abcde,12785,12345,aaaaaaa
abcde,12845,12345,aaaaaaa
abcde,12995,12345,aaaaaaa
Где -F,
устанавливает разделитель полей на ','
и OFS
( выходной разделитель полей ) для ','
.
Пояснение
-F, -v OFS=','
установите разделитель полей и выходной разделитель полей на comma
. {$3 = substr ($3, 7)}
удалите первые 6 символов (сохранить подстроку, начинающуюся ссимвол 7) из 3-го поля, заменив 3-е поле подстрокой. 1
выведите все поля с указанными разделителями.
Если поместить его полностью, это простой способпарсинг файла .csv
.
примечание: , если количество символов в 3-м поле может варьироваться и вам нужны только последние 5 независимо от номера, тогда вы можете использовать length()
функция для получения индекса последнего символа (и вычитания 4
для печати последнего 5
), например,
$ awk -F, -v OFS=',' '{$3 = substr ($3, length($3) - 4)} 1' file
<same output>
Запрошенное редактирование на основе 7-го символа в 3-м поле == 0
Помните, что в отличие от C, индексы awk
начинаются с 1
вместо 0
.Поэтому, если вы хотите проверить, является ли 1-й символ из последних 5 показанных 0
, вам необходимо проверить 7-й символ.Вы можете сделать это с помощью другого substr
и затем троичного оператора , например,
Новый файл данных примера
$ cat file
abcde,12345,fedefg12345,aaaaaaa
abcde,12785,feeefg12345,aaaaaaa
abcde,12845,fezefg12345,aaaaaaa
abcde,12995,femefg12345,aaaaaaa
abcde,13001,femefg02345,aaaaaaa
(последнийстрока содержит ваше условие)
Пример использования / Вывод
$ awk -F, -v OFS=',' '{$3 = substr($3,length($3)-(substr($3,7,1)==0?3:4))} 1' file
abcde,12345,12345,aaaaaaa
abcde,12785,12345,aaaaaaa
abcde,12845,12345,aaaaaaa
abcde,12995,12345,aaaaaaa
abcde,13001,2345,aaaaaaa
(я убрал пробелы, чтобы предотвратить перенос или прокрутку строки)