linux - awk根据条件过滤文件

标签 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);

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

最佳答案

这不是一个答案,而是代码的可读版本:

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

关于linux - awk根据条件过滤文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49108678/

相关文章:

python - 如何使用 python 挂载 USB 设备或硬盘分区

linux - bash 脚本。在数字范围前插入一个空行

json - 在 shell 中解析 JSON

linux - ~/.local/bin 中的文件优先于/usr/bin

linux - 我如何获得 Ubuntu 源代码?

Python Selenium "Connection refused"错误在 ssh 终端中出现,但在常规终端中没有出现

python - 获取 Ubuntu 或 Python 中打开的目录/浏览器的路径或 url?

linux - Bash 脚本 - Crontab 完成 bash 脚本的一部分但不是全部

windows - 进程句柄重用的频率

shell - 复制标准输出,将其通过管道传输到两个不同的命令,将两者的结果收集到最终程序的标准输入