簡體   English   中英

在以bash(awk)滾動到新文件時,刪除點和斜杠

[英]Removing dots and slashes when piping into new file in bash (awk)

我有一個bash問題(使用awk )。 我正在提取文本文件中第一列和第五列的每個實例,並使用以下代碼將其通過管道傳遞到新文件中,

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

這是文件(test170201.rawtxt)的一部分,我正在從TimestampLoss列中提取數據,

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() (全局替換)函數執行以下操作:

  • 替代. 有空間
  • 刪除:/
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

沒問題,管道中的此sed命令應該可以解決問題:

  awk '/stream_0/ { print $1, $5  }' test170201.rawtxt |
  sed 's=/==g;s=:==g;s=\.= =g;s=^= =' > testLogFile.txt 

注意. 是正則表達式,所以你必須逃離這讓sed將其識別為一個周期性質。 替換命令上的g修飾符告訴sed刪除所有出現的內容。 最后,“ ^”正則表達式匹配行的開頭; 最后一個子句將前導空格放入輸出中。 cut命令似乎是多余的。

man sed了解更多。

您可以在打印列之前在awk命令中使用gsub

awk '/stream_0/ { gsub(/[\/:]/, "", $1); gsub(/[.]/, " ", $1); print $1, $5 }' file

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM