2017-06-14 94 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