2014-11-03 60 views
0

我安裝了Windows的unix工具,但無法使用awk打印換行符。我試過所有的開關:\ n,但似乎沒有任何工作。對你的幫助表示感謝。在Windows上使用awk打印在Windows上使用unix工具換行

我輸入(C:\ TEMP \ servers.txt)」

123 0 1 
234 1 1 

這是我的腳本:

for /F "tokens=1" %%A In (c:\temp\servers.txt) DO awk "$2 == "0" {print $6,\n }" input.txt 
+2

我認爲你總是會在打印的3第6場困難... – 2014-11-03 12:58:20

+0

不要使自己到Windows引用地獄。如果可能的話安裝cygwin。如果沒有,將awk腳本保存在一個文件中,並將其作爲'awk -f file'執行。 – 2014-11-03 16:53:21

回答

1

打印換行符的最簡單的方法就是使用print ""的輸出記錄分隔符ORS(默認情況下是換行符)將被附加到空字符串。

如果您已有print聲明並且想要在輸出中添加新的換行符,您可以自己使用ORS變量,例如print $6 ORS

這種方法更便攜比硬編碼字符「\ r \ n」或「\ n」個腳本,爲ORS的默認值應只是工作爲您正在運行的系統(即它在Windows上應該已經是「\ r \ n」,在大多數其他系統上應該是「\ n」)。

2

的Windows是在命令參數受理單引號無用的 - 這意味着你需要把你的awk命令雙引號內的Windows,這意味着你不能使用雙引號print語句和字符串 - GRRRR!

因此它更容易把你的awk命令到一個名爲script.awk像這樣的文件:

BEGIN{ORS="\r\n"} 
$2==0{print $1} 

,說...分開所有輸出線,回車+換行符(Windows只是如何喜歡的東西)和那麼,在第二個字段爲零的任何行上,打印第一個字段。

則執行以下操作:

awk -f script.awk C:\servers.txt 
0

打印包含嵌入換行符的字符串的一個例子;

的「\ n」是一個轉義序列,用來表示換行符

$ awk 'BEGIN { print "line one\nline two\nline three" }' 
-| line one 
-| line two 
-| line three 

也許這篇文章將幫助你升技更多: https://www.gnu.org/software/gawk/manual/html_node/Print-Examples.html

對於這個問題的多種解決方案,你可以嘗試看看哪一個最適合你

+1

嗨Shqiptar,你的例子將在bash中工作,但它不適用於windows。我收到一個語法錯誤。你可以改變我的腳本,並告訴我如何編碼。 – Rosebud 2014-11-03 13:03:05

0

在Windows中你必須使用雙引號作爲命令行腳本,並且你必須使用這樣的反斜槓來隱藏嵌入的雙引號:

C:\Users\ReluctantBiosGuy>gawk "BEGIN{print \"line one\nline two\nline three\"}" 
line one 
line two 
line three 

C:\Users\ReluctantBiosGuy> 

爲了您的原始腳本,我不明白你爲什麼要使用command.com對命令,也不是明確的,你真的要打印的內容。但是,下面的應該給你足夠的信息做你真正想做的事:

C:\Users\ReluctantBiosGuy>type x 
123 4 5 
132 0 4 
153 0 33 
384 3 88 

C:\Users\ReluctantBiosGuy>gawk "$2==0{printf(\"Token 1 is %s\n\n\",$1)}" x 
Token 1 is 132 

Token 1 is 153 


C:\Users\ReluctantBiosGuy>