我希望在awk
中使用字符串(BIRCH)作为字段分隔符来打印第二个字段。我正在尝试以下命令:
cat tmp.log|awk -FBirch '{ print $2}'
以下输出正在打印:
irch2014 / 06 / 23,04:36:45,3,1401503,XML-哈伦,P12345-1,温度,0a653356353635635,温度,L,成功
期望的输出:
2014/06 / 23,04:36:45,3,1401503,XML-哈伦,P12345-1,温度,0a653356353635635,温度,L,成功
tmp.log 文件的内容。
-bash-3.2# cat tmp.log
Dec 05 13:49:23 [x.x.x.x.180.100] business-log-dev/int [TEST][0x80000001][business-log][info] mpgw(Test): trans(8497187)[request][10.x.x.x]:
Birch2014/06/23,04:36:45,3,1401503,xml-harlan,P12345-1,temp,0a653356353635635,temp,L,Success
我做错了吗?
尝试下面的一个ansers中建议的命令。我得到了所需的输出,但顶部有一个额外的空行。如何从输出中消除它?
-bash-3.2# /usr/xpg4/bin/awk -FBirch '{print $2}' tmp.log
2014/06/23,04:36:45,3,1401503,xml-harlan,P12345-1,temp,0a653356353635635,temp,L,Success
答案 0 :(得分:3)
最初,我建议在“Birch”(-F'Birch'
)周围加上引号,但实际上,我认为这不应该有任何区别。
我根本没有使用Solaris的经验,但您可能还想尝试使用nawk
(“new awk”)而不是awk
。
nawk -FBirch '{print $2}' file
如果这样做,您可能需要考虑创建一个别名,以便始终使用具有更多功能的较新版本的awk。
您可能还想尝试在/usr/xpg4/bin
目录中使用awk版本,这是一个符合POSIX标准的实现,因此应该支持多字符FS
:
/usr/xpg4/bin/awk -FBirch '{print $2}' file
如果您只想打印包含多个字段的行,则可以添加条件:
/usr/xpg4/bin/awk -FBirch 'NF>1{print $2}' file
只有在有多个字段时才打印第二个字段。
答案 1 :(得分:1)
来自solaris usr/bin/awk
-Fc Uses the character c as the field separator
(FS) character. See the discussion of FS
below.
如您所见,solaris awk只将一个字符作为字段分隔符
同样在手册页中分割
split(s, a, fs)
Split the string s into array elements a[1], a[2], ...
a[n], and returns n. The separation is done with the
regular expression fs or with the field separator FS if
fs is not given.
正如你在这里看到的,它需要一个正则表达式作为分隔符,所以我们可以使用。
awk 'split($0,a,"Birch"){print a[2]}' file
打印按Birch