如何解析特定列或数据而不丢失解析后其他列的内容?

如何解析特定列或数据而不丢失解析后其他列的内容?

原始问题和正文已编辑:我有以下输出来 grep 本例中的值“225”。该值是动态的,因此它可能会根据输入而变化”,但我想仅根据第 4 列中的匹配模式获取值为 225 的整行,而不丢失整行的内容。

Input:
10.20.223.10|2000-H1|1/1/2|DeviceX_4021|LG
10.20.223.10|2000-H1|1/1/3|Undiscoverable|Unkwn
10.20.225.10|2000-H1|1/1/5|DeviceZ_2050|LG
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore

Desired Output
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore

The following output its not desired:
10.20.225.10|2000-H1|1/1/5|DeviceZ_2050|LG
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore

我尝试了很多 awk 和 grep 但没有成功。请记住,我在第一列第 3 行的值为 225;所以我不需要那个输出。只需要第 4 列上与“225”匹配的所有内容即可。现在文件用管道分隔,没有任何空格。

答案1

使用awk

awk -F'|' '$4 ~ /[^0-9]225[^0-9]/' file

225在第四个字段中匹配并打印匹配值前面或后面没有数字(如12252256)的记录。

答案2

您的数据看起来适合 awk 格式:

$ awk '$8 == "225)"' INPUT
10.20.225.207        Device #1            1/1/23  Brand #2 (MODEL: 225)         LG
10.20.209.252        Device #2            1/1/36  Brand #2 (MODEL: 225)         LG

我们使用第 8 列,因为 awk 默认情况下用空格分隔列。

答案3

希望这对您有用:

grep 'MODEL: 225)' input-file

假设该值225始终前面带有MODEL:.

答案4

我用 perl 和 sed 找到了一个解决方案。如果我们能用 awk 来实现就好了。

解决方案 A 感谢 Dave Cross

  • perl -aF'|' -ne '$F[3] =~ 225 并打印' < 输入

解决方案 B 感谢 John Bollinger

  • sed -n '/^([^|]*|){3}[^|]*225/p' < 输入

相关内容