У меня есть 7-й столбец со значениями вроде:
OS:J:\output\Windows\System32\winevt\Logs\Security.evtx
OS:J:\output\Windows\System32\winevt\Logs\System.evtx
Я хочу извлечь информацию, прочитав значения в обратном порядке и поместив их в новый столбец.
Значения, которые необходимо извлечь в новый столбец, скажем, «местоположение», должны выглядеть следующим образом:
Location
Security.evtx
System.evtx
решение1
$ awk -F'\' '{print $7}' inputfile
решение2
Как проверено Последний столбец - $7 Используется следующая команда для извлечения значений
команда
sed -r 's/.*\\//g' filename
выход
Security.evtx
System.evtx
решение3
Предполагая, что есть по крайней мере еще шесть полей, которые вы не отображаете перед 7-м полем с данными в вопросе, вы можете прочитать CSV-файл с помощью такого инструмента, какМиллер( mlr
), чтобы создать новое location
поле для новых значений.
Предположим далее, что в вашем CSV-файле есть заголовки (поскольку вы хотите создать новое location
поле) и что заголовок для 7-го поля — filepath
, то вы можете сделать следующее:
mlr --csv put '$location = sub($filepath,".*\\","")' file
Функция sub()
удалит весь текст перед последним обратным слешем в filepath
поле. Результат этой операции затем присваивается новому location
полю.
Тестирование:
$ cat file
A,B,C,D,E,F,filepath
1,2,3,4,5,6,OS:J:\output\Windows\System32\winevt\Logs\Security.evtx
1,2,3,4,5,6,OS:J:\output\Windows\System32\winevt\Logs\System.evtx
$ mlr --csv put '$location = sub($filepath,".*\\","")' file
A,B,C,D,E,F,filepath,location
1,2,3,4,5,6,OS:J:\output\Windows\System32\winevt\Logs\Security.evtx,Security.evtx
1,2,3,4,5,6,OS:J:\output\Windows\System32\winevt\Logs\System.evtx,System.evtx
$ mlr --c2p --barred put '$location = sub($filepath,".*\\","")' file
+---+---+---+---+---+---+---------------------------------------------------------+---------------+
| A | B | C | D | E | F | filepath | location |
+---+---+---+---+---+---+---------------------------------------------------------+---------------+
| 1 | 2 | 3 | 4 | 5 | 6 | OS:J:\output\Windows\System32\winevt\Logs\Security.evtx | Security.evtx |
| 1 | 2 | 3 | 4 | 5 | 6 | OS:J:\output\Windows\System32\winevt\Logs\System.evtx | System.evtx |
+---+---+---+---+---+---+---------------------------------------------------------+---------------+
Хотите ли вы внести изменения на месте, а затем добавьте опцию -I
перед этим --csv
в командной строке.
решение4
awk -F ' / ' '{print $7} yourfilename