热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如果在Linux中仅匹配特定值,如何打印列?

我有一个这样的sample.txt文件:abcshkansjcdefxyzdkkskghdsskjshhddjshxyz

我有一个这样的 sample.txt 文件:

abc shk ansjc
def xyz dkksk
ghd ssk jshhd
djsh xyz dsoop
ssd swl jsjdl

我想打印 column1 & column2 但如果只有内容与“xyz”匹配,则可以打印 column2,因此输出如下。

abc
def xyz
ghd
djsh xyz
ssd

这是我到目前为止尝试过的,

awk '$2 == "xyz" { print $1,$2 }' output2.txt || awk '$2 != "xyz" { print $1 }'

谁能帮我得到这个输出?

回答

这是另一个 POSIX 投诉awk解决方案:

awk '{print $1 ($2 == "xyz" ? OFS $2 : "")}' file
abc
def xyz
ghd
djsh xyz
ssd



  • Yes `awk '{print $1, ($2 == "xyz" ? $2 : "")}' file` works too but it leaves a trailing whitespace after 1st column.


  • Also goes using the `comma`: `{print $1, ($2=="xyz") ? $2 : ""}`




回答

使用您显示的示例,您可以尝试以下操作。

awk '{printf("%s%s",$1,($2=="xyz"? OFS $2:"")ORS)}' Input_file

或者

awk '{printf("%s%sn",$1,($2=="xyz"? OFS $2:""))}' Input_file

解释:简单的解释是,使用printf函数awk打印当前行中的值(根据 OP 的需要)。在它首先打印第一个字段,然后在打印第二个值时,检查条件如果第二个字段是xyz打印空间,然后是$2 后跟新行,否则只打印新行。





回答

使用awk允许操作NF(例如:GNU awkmawk)的实现:

$ awk '{NF = $2=="xyz" ? 2 : 1} 1' ip.txt
abc
def xyz
ghd
djsh xyz
ssd

您也可以使用,awk 'NF = $2=="xyz" ? 2 : 1'因为表达式的计算结果为true






推荐阅读
author-avatar
贝乐小凸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有