linux - 在 bash (awk) 中导入新文件时删除点和斜杠

标签 linux bash awk

我有一个 bash 问题(使用 awk 时)。我正在提取文本文件中第一列和第五列的每个实例,并使用以下代码将其通过管道传输到新文件,

cut -f4 test170201.rawtxt | awk '/stream_0/ { print $1, $5  }' > testLogFile.txt 

这是我从 TimestampLoss 列中提取数据的文件 (test170201.rawtxt) 的一部分,

Timestamp                 Stream     Status     Seq         Loss Bytes    Delay
17/02/01.10:58:25.212577  stream_0     OK      80281          0  1000     38473
17/02/01.10:58:25.213401  stream_0     OK      80282          0  1000     38472
17/02/01.10:58:25.215560  stream_0     OK      80283          0  1000     38473
17/02/01.10:58:25.216645  stream_0     OK      80284          0  1000     38472

这是我在 testLogFile.txt 中得到的结果

17/02/01.10:58:25.212577 0
17/02/01.10:58:25.213401 0
17/02/01.10:58:25.215560 0
17/02/01.10:58:25.216645 0

我想去掉 "/"":""."。我想要的结果输出如下所示:

 170201 105825 212577 0
 170201 105825 213401 0
 170201 105825 215560 0
 170201 105825 216645 0

我的问题是,如何修改我的代码以获得上述结果?我使用的平台是Debian GNU/Linux,GNU awk版本是4.0.1

最佳答案

您可以使用 awk gsub() (global substitute) function到:

  • 用空格替换.
  • 删除:/
cut -f4 test170201.rawtxt | awk '/stream_0/ { 
    gsub(/\./," ",$1)
    gsub(/[:\/]/, "", $1)
    print $1, $5
}' > testLogFile.txt

事实上,cut 似乎是多余的 - 这将满足您对示例数据的要求:

awk '/stream_0/ { 
    gsub(/\./," ",$1)
    gsub(/[:\/]/, "", $1)
    print $1 , $5
}' test170201.rawtxt > testLogFile.txt

关于linux - 在 bash (awk) 中导入新文件时删除点和斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42075300/

相关文章:

php - 登录时出现空白页

linux - 期望带有引号的 rsync 脚本

regex - 如何仅替换文件中的特定列?

macos - -bash : : command not found when launching the shell in Mac OSX

xml - 在 XML 文件中查找和递增数字

java - 关于Linux系统中运行的Spring RMI

c++ - 是否有任何工具支持 C++ 基于检查点的内存使用分析

bash/sed : Concat multiple line plus eat up leading spaces for sublines

csv - AWK 拆分带有标题的大型 CSV 文件并根据列值打印输出文件

shell - 需要有关 unix 脚本的帮助以从特定位置读取数据并使用查询中提取的数据