[英]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)的一部分,我正在從Timestamp
和Loss
列中提取數據,
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.