awk根据条件过滤文件

时间:2018-03-05 10:47:41

标签: linux bash shell awk scripting

我使用下面的代码来过滤我的源文件。 此代码包含多个gsub条件

但是这里的问题是由于多个gsub,脚本需要花费大量时间来执行和解析另一个文件中的数据。 你能不能让我知道实现这些条件的其他方法,以便我的脚本可以更快地执行

awk -F"[        \t]" -v OFS="|" '{gsub(/^[ \t]+|[ \t]+$/,"");gsub(/"/,"");gsub(/[[:blank:]]+|\.|\-/,"",$32);gsub(/[[:blank:]]+|\.|\-/,"",$13);gsub(/^[[:space:]]+|[[:spa
ce:]]+$|\,/,"",$38);gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$42);gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$44);gsub(/^[[:space:]]+|[[:space:]]+$/,"",$27);gsub(/^[[:spa
ce:]]+|[[:space:]]+$/,"",$40);gsub(/^[[:blank:]]+|[[:blank:]]+$/,"",$18);

以下是相同的代码,但为了便于阅读(仅为了可读性),我们将其分为几部分:

awk -F"[        \t]" -v OFS="|" '{gsub(/^[ \t]+|[ \t]+$/,"");
                                  gsub(/"/,"");
                                  gsub(/[[:blank:]]+|\.|\-/,"",$32);
                                  gsub(/[[:blank:]]+|\.|\-/,"",$13);
                                  gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$38);
                                  gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$42);
                                  gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$44);
                                  gsub(/^[[:space:]]+|[[:space:]]+$/,"",$27);
                                  gsub(/^[[:space:]]+|[[:space:]]+$/,"",$40);
                                  gsub(/^[[:blank:]]+|[[:blank:]]+$/,"",$18);

如果需要输入文件,请告诉我,将分享

1 个答案:

答案 0 :(得分:0)

这不是anwser,而是代码的可读版本:

awk -F"[        \t]" -v OFS="|" '
  { gsub(/^[ \t]+|[ \t]+$/,"");
    gsub(/"/,"");  
    gsub(/[[:blank:]]+|\.|\-/,"",$32);
    gsub(/[[:blank:]]+|\.|\-/,"",$13);
    gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$38);
    gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$42);
    gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$44);
    gsub(/^[[:space:]]+|[[:space:]]+$/,"",$27);
    gsub(/^[[:space:]]+|[[:space:]]+$/,"",$40);
    gsub(/^[[:blank:]]+|[[:blank:]]+$/,"",$18);
  }' # closing brace and quote were probably missing
相关问题