如果Field3包含在Field1中,则修改Field1(Awk)

时间:2018-08-30 00:07:55

标签: awk

我正在尝试使用Awk实现此逻辑:

如果$ 3在$ 1中,则将“ $ 1和1空格的$ 3部分”替换为“”(空格)。 打印此新行和所有其他行。

例如在我的输出(下)中,在字段$ 3中找到“巴黎”,在字段$ 3中。因此,在$ 1字段中,“ Paris”被替换为“”。

输入文件

if (Test-Path -LiteralPath $destinationFile) {
    $i = 1
    Rename-Item $destinationFile ($_.BaseName + "_$i" + $_.Extension)
}

需要输出

field1|field2|field3
abc Paris Match|xxxx|Paris
aaaaa|yyyyy|London

代码尝试(无效)

field1|field2|field3
abc Match|xxxx|Paris
aaaaa|yyyyy|London

2 个答案:

答案 0 :(得分:0)

这是一种方法

$ awk 'BEGIN {FS=OFS="|"} 
             {sub($3,"",$1)}1' file

field1|field2|field3
abc  Match|xxxx|Paris
aaaaa|yyyyy|London

请注意,其余单词之间有两个空格。

答案 1 :(得分:0)

$ awk 'BEGIN{FS=OFS="|"} s=index($1,$3){$1=substr($1,1,s-1) substr($1,s+length($3)); gsub(/ +/," ",$1)} 1' file
field1|field2|field3
abc Match|xxxx|Paris
aaaaa|yyyyy|London

以上假设您不在乎$ 1中多个空白的任何现有序列是否也压缩为单个空白。