Удаление строк из текстового файла - PullRequest
0 голосов
/ 10 марта 2020

У меня есть текстовый файл, например:

| abc_0123        | CREATE_COMPLETE      | 2020-02-17T12:03:27  | D4F5                        |
| defgh_0456       | CREATE_COMPLETE      | 2020-02-28T13:25:15  | G6H7I8
…

Я хочу сохранить только:

abc D4F5
defgh G6H7I8

Я пытался:

sed -i 's/| abc_0123        | CREATE_COMPLETE      |/abc/g' text.txt

Работает , но не могу избавиться от даты.

Ответы [ 3 ]

1 голос
/ 10 марта 2020
$ cat input
| abc_0123        | CREATE_COMPLETE      | 2020-02-17T12:03:27  | D4F5          
| defgh_0456       | CREATE_COMPLETE      | 2020-02-28T13:25:15  | G6H7I8
$ awk '{split($2,a, "_"); print a[1], $5}' FS=\| input
 abc  D4F5                        
 defgh  G6H7I8

Хотя вы можете предпочесть избавиться от лишних пробелов с помощью:

awk '{split($2,a, "_"); print a[1], $5}' FS='[| ]*' input
0 голосов
/ 10 марта 2020
$ awk -F'[[:space:]|_]+' '{print $2, $7}' file
abc D4F5
defgh G6H7I8

или если части в середине не всегда выглядят так, как вы показали, то:

$ awk -F'[[:space:]|_]+' '{print $2, $(NF-1)}' file
abc D4F5
defgh G6H7I8
0 голосов
/ 10 марта 2020

Использование AWK

awk -F"|" '{print $2, $NF}'

объяснение:

awk -F"|"  -- Set field separator as pipe (|)
'{print $2, -- Print second column
$NF -- Print last column. NF is an internal variable that stores number of fields.
}'

Демонстрация:

:>echo "| abc_0123        | CREATE_COMPLETE      | 2020-02-17T12:03:27  | D4F5  "  | awk -F"|" '{print $2, $NF}' 
 abc_0123          D4F5  
:>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...