2017-06-14 139 views
0

我如何可以單獨使用AWK逗號爲以下如何使用awk忽略逗號?

1, servername, url, Properties, hostname, version, os, application server. 

我已經保存在一個文件上線叫test.properties和使用下面的命令

awk '{ print $1 }' test.properties 

,我只是希望將服務器名稱打印在輸出中,而是打印整行。

我應該用cut來代替這種情況嗎?

+0

更改爲字段分隔符爲逗號'的awk -F,「yadayada'' – 123

+0

如果你的例子打印整條生產線,你有一個更大的問題,因爲AWK被打破。你的示例輸入應該打印出'1'(不含引號)。我會建議重新安裝它,然後再查看提供的任何解決方案 – grail

回答

1

考慮:

$ echo "$txt" 
1, servername, url, Properties, hostname, version, os, application server 

只需正確設置字段分隔符爲逗號:

$ echo "$txt" | awk -F, '{print $1}'  
1 

或者,正如你所說,使用cut

$ echo "$txt" | cut -d , -f1  
1 
+0

謝謝你的工作。我試圖使用字段分隔符,但不正確。這就是我所做的awk -F','{print $ 1}' 〜 – SGR29

+0

單引號的單引號是'awk -F $','但在這種情況下你不需要引用。 – dawg

+0

@dawg總是引用你的字符串,除非你有特殊的理由不要,並且使用單引號,除非你需要雙引號。行情不是你在需要時添加的東西,而是你在需要時刪除**的東西。在設置'FS'時不需要任何bashisms,因爲awk在命令行上設置變量時會解釋轉義序列。 @SGR29與'awk -F','...'是編寫代碼的最好方式,如果它不起作用,那麼在調查原因時,這是值得的。 –

0

是的,你應該使用cut來處理這種情況,這是它的設計目的。

+0

謝謝埃德。你能解釋我什麼時候以及爲什麼要使用cut vs awk嗎?感謝您的答覆。 – SGR29

+0

當您想使用1個字符的分隔符以與輸入中出現的順序相同的順序打印字段時,使用'cut'。使用'awk'做其他事情。這樣做的理由是簡潔和高效。 –

-2

您也可以使用如果您的字符串僅包含ASCII 0x20-0x7f中的字符(反斜槓(\)除外)(由Stéphane Chazelas有關處理shell變量提到注意告誡):

s='1, servername, url, Properties, hostname, version, os, application server' 
IFS=', ' read _ server _ <<<"$s" 
echo "'$server'" 

輸出:

'servername' 

,或者使用位置參數:

oIFS="$IFS" 
export IFS=', ' 
set -- $s 
echo $2 
IFS="$oIFS" 

或者:

function getserver() (
    export IFS=', '; set -- $1; echo $2 
) 
getserver "1, servername, url, Properties, hostname, version, os, application server" 

輸出:

servername