搜索模式并使用管道分隔文件中的搜索模式替换整个列

时间:2018-02-20 12:53:13

标签: unix awk

我有30列的管道分隔文件,这可能会改变。 。我需要在所有列上搜索某些模式,当找到匹配时,我需要用匹配的模式替换整个列。这是示例

WhereCondition:="[....] AND [x] BETWEEN #" & Format(Me.Datum_von, "mm\/dd\/yyyy") & "# AND #" & Format(Me.Datum_bis, "mm\/dd\/yyyy") & "#"

需要搜索以abc开头并以rar结束的字符串,并在匹配时用它替换整个列 输出应该是:

Id|col1|col2|col3
20|eff ghb abcxrar Kano|abcrar|thgh abctgggrar 
30|abcrar|fgt Lon abcfgtrar|abctrar def

1 个答案:

答案 0 :(得分:1)

关注awk可能对您有所帮助:

awk -F"|" '{for(i=1;i<=NF;i++){num=split($i,array," ");for(j=1;j<=num;j++){if(match(array[j],/^abc.*rar$/)){$i=substr(array[j],RSTART,RLENGTH)}}}} 1' OFS="|"  Input_file

现在添加一种非单线形式的解决方案:

awk -F"|" '
{
  for(i=1;i<=NF;i++){
    num=split($i,array," ");
    for(j=1;j<=num;j++){
      if(match(array[j],/^abc.*rar$/)){
        $i=substr(array[j],RSTART,RLENGTH)}}}
}
1' OFS="|"  Input_file

输出如下:

Id|col1|col2|col3
20|abcxrar|abcrar|abctgggrar
30|abcrar|abcfgtrar|abctrar