Как напечатать строку в 7-м столбце, прочитав значение ячейки csv в обратном порядке с помощью awk или sed

Как напечатать строку в 7-м столбце, прочитав значение ячейки csv в обратном порядке с помощью awk или sed

У меня есть 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

Связанный контент