【问题标题】:Search for a pattern and replace entire column with searched pattern in a pipe delimited file在管道分隔文件中搜索模式并用搜索到的模式替换整个列
【发布时间】:2018-07-30 20:13:51
【问题描述】:

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

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

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

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

【问题讨论】:

  • 欢迎来到 Stack Overflow,请将您的示例输入和预期示例输出发布在 CODE TAGS 中,包含所有条件,以便我们在此方面为您提供帮助。
  • 还添加您试图质疑的内容......所以是关于获得您尝试但没有工作的代码的帮助

标签: unix awk


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 2011-08-16
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多