如何从CSV输出中删除NONREF和RETURN行

我有一个csv文件,其中包含具有NONREF和RETURN的行,NONREF行已被删除,只需要帮助即可删除RETURN行。

这是CSV文件的样子,如下所示:

806185341,1395290,29/10/2019,USD,-1743.01
806185341,190944,-386.75
806185341,NONREF,21351.47
806185341,30/10/2019,-691430.16
806185341,1395043,-1021.72 
806185341,RETURN,4/10/2019,12.98

代码是:

awk -v s1="      " '
     BEGIN{
     FS=","
      }
      {
      gsub(/\r/,"")
    }
    FNR==1{
      print
     next
     }
      $2!~/NONREF/{
      $1=substr($1,1,3)"-"substr($1,4,5)"-"substr($1,length($1))
       $2=sprintf("%010d",$2)
       split($3,array,"/")  
      $3=sprintf("%02d%02d%s",array[2],array[1],substr(array[3],3))
      if($NF~/\.[0-9]$/){
       $NF=$NF"0"
       }
       gsub(/^-|\./,"",$NF)
     $NF=sprintf("%012d",$NF)
      $3=$3 $NF
      print $1 s1 $2,$3
       }
      '  Input_file

预期输出:

806-18534-1      0001395994 103119000000058658
806-18534-1      0001396080 103119000000115483
806-18534-1      0001395958 103119000000076487
806-18534-1      0001395893 103119000000098132
wwyfendou 回答:如何从CSV输出中删除NONREF和RETURN行

在这种情况下,您需要忽略代码中的2个字符串。

awk -v s1="      " '
BEGIN{
  FS=","
}
{
  gsub(/\r/,"")
}
$2!~/NONREF/ && $2 !~ /RETURN/{
  $1=substr($1,1,3)"-"substr($1,4,5)"-"substr($1,length($1))
  $2=sprintf("%010d",$2)
  split($3,array,"/")  
  $3=sprintf("%02d%02d%s",array[2],array[1],substr(array[3],3))
  if($NF~/\.[0-9]$/){
    $NF=$NF"0"
  }
  gsub(/^-|\./,"",$NF)
  $NF=sprintf("%012d",$NF)
  $3=$3 $NF
  print $1 s1 $2,$3
}
'  Input_file

需要注意的几点:

  • 尝试使代码缩进与获取代码相同,否则很难理解代码。
  • 我已从您的代码中删除了FNR==1部分,因为您的示例中没有标题,以防您后来将其添加回去。
,

您还可以在末尾添加grep,例如:

... | grep -v "NONRETURN" | grep -v "NOREF"
本文链接:https://www.f2er.com/3143531.html

大家都在问