AWK заменяет большую строку частью ее в одном столбце (вырезает часть этого) и печатает все остальные столбцы без изменений, сохраняя форматирование - PullRequest
0 голосов
/ 27 марта 2020

Я хочу заменить большую строку на ее часть - текст из второй строки sh "/" в столбце 2. Также необходимо сохранить форматирование.

Мой текст

99-AAA-9999 |  ZZZ/AAA/999999/AAA/99.99.9999                        |            |       9.99 |   99999.99 |
99-AAA-9999 |  ZZZ/AAAA AAAA/999999/AAA/99.99.9999                  |            |       9.99 |    9999.99 |
99-AAA-9999 |  ZZZ/AA AAAAAAA/999999/AAA/99.99.9999                 |            |       9.99 |   99999.99 |
99-AAA-9999 |  ZZZ/AAA AAAAA AAAAAAA AAAAAA/999999/AAA/99.99.9999   |            |       9.99 |   99999.99 |
99-AAA-9999 |  ZZZ/AAAA AAAAAA AAAAA/999999/AAA/99.99.9999          |            |       9.99 |   99999.99 |

Я хочу вот так после обрезки текста из ZZZ / AA ..... до второго sla sh "/" с хорошим форматированием

99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |   99999.99 |
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |    9999.99 |
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |   99999.99 |
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |   99999.99 |
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |   99999.99 |

На самом деле есть Есть много других столбцов, но я предоставил только примерные данные. Примечание: весь текст и цифры не совпадают.

Пожалуйста, объясните мне, как это сделать, используя awk или sed, предпочтительно awk.

1 Ответ

1 голос
/ 27 марта 2020
$ sed 's:[^ /]*/[^/]*/\([^|]*[^ |]\) *|:\1 |:' file
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |   99999.99 |
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |    9999.99 |
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |   99999.99 |
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |   99999.99 |
99-AAA-9999 |  999999/AAA/99.99.9999 |            |       9.99 |   99999.99 |
...