在修改awk
中的特定字段后,输出字段分隔符上的信息是否丢失,是否总是这样?如果有多个字段分隔符并且我希望它们被恢复,会发生什么?awk中输出字段分隔符在字段中替换
例如,假设我有一个简单的文件example
包含:
a:e:i:o:u
如果我只是运行一个awk
脚本,它考虑了输入分隔符,即打印每一行中我的文件,例如as running
awk -F: '{print $0}' example
我会看到原始的行。但是,如果我直接修改其中一个字段,例如与
awk -F: '{$2=$2"!"; print $0}' example
我不回去原线的改良版,而我看到的默认空白分离器分离的领域,即:
a e! i o u
我能找回的修改版本通过指定OFS原,例如:
awk -F: 'BEGIN {OFS=":"} {$2=$2"!"; print $0}' example
在这种情况下,然而,在存在多个潜在字段分隔符,但在多个分离的情况下是有简单的方法恢复原始分隔符?
例如,如果example
有两个:
和;
作为分隔符,我可以用-F":|;"
处理文件,但会OFS没有足以恢复原来的隔板在它们的相对位置。
更明确地说,如果我们切换到含有
a:e;i:o;u
我们可以使用
awk -F":|;" 'BEGIN {OFS=":"} {$2=$2"!"; print $0}' example2
(或-F"[:;]"
)example2
得到
a:e!:i:o:u
,但我们已经失去了区别之间 ;这将一直保持下去,如果我们能恢复
a:e!;i:o;u
问题是这里罕见的好问题之一。为什么不简单地使用'-F'[:;]''来添加一个非工作示例。这会使问题变得完美 - imo – hek2mgl
明确添加的示例 – borrible
RT的字段分隔符相当于GNU扩展。我想知道他们为什么没有它。 –