AWK 在一列中用它的一部分替换一个大字符串(切掉它的一部分),并完整地打印所有其他列,保持格式
AWK replace a big string with a part of it in one column (cut a part of it), and print all other columns intact, keeping the formatting
我想用它的一部分替换一个大字符串 - 第 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..... 到第二个斜杠“/”的文本被截断后,我想要这样,格式良好
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。
$ sed 's:[^ /]*/[^/]*/\([^|]*[^ |]\) *|: |:' 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 |
我想用它的一部分替换一个大字符串 - 第 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..... 到第二个斜杠“/”的文本被截断后,我想要这样,格式良好
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。
$ sed 's:[^ /]*/[^/]*/\([^|]*[^ |]\) *|: |:' 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 |