bash - 在 Solaris 上的 awk 中使用多字符字段分隔符

标签 bash shell awk solaris

我希望在 awk 中使用字符串 (BIRCH) 作为字段分隔符来打印第二个字段。我正在尝试以下命令:

cat tmp.log|awk -FBirch '{ print $2}'

正在打印以下输出:

irch2014/06/23,04:36:45,3,1401503,xml-harlan,P12345-1,temp,0a653356353635635,temp,L,Success

期望的输出:

2014/06/23,04:36:45,3,1401503,xml-harlan,P12345-1,temp,0a653356353635635,temp,L,Success

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

我做错了什么吗?

  • 操作系统:Solaris10
  • shell :Bash

尝试了以下答案之一中建议的命令。我得到了所需的输出,但顶部有一个额外的空行。如何从输出中消除这种情况?

-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,成功

最佳答案

最初,我建议在“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

当有多个字段时,仅打印第二个字段。

关于bash - 在 Solaris 上的 awk 中使用多字符字段分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27399845/

相关文章:

linux - 用 Awk 洗牌

bash - 如何在 bash 中正确处理和打印带空格的文件

bash - 使用 bash 4 语法将 Makefile 中字符串的首字母大写

macos - OSX bash 递归查找按大小排序的文件,文件夹中除外

bash - 如何按字母顺序对主列进行排序,然后按数字顺序对辅助列进行排序?

shell - 在 bash 中删除匹配之前和之后的行(使用 sed 或 awk)?

用作 ssh 输入的 here-document 中的 shell 脚本没有给出任何结果

regex - 当被数值包围时替换空格,但不被字母字符包围

python - 你如何在 Python/Bash/AWK 中使用二进制转换?

perl - 如何删除在 perl 中运行的 shell 命令未使用的参数?