我有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
答案 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