Shell编程中,如何提取输出记录中的从首行到倒数第n行之间的信息?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell编程中,如何提取输出记录中的从首行到倒数第n行之间的信息?相关的知识,希望对你有一定的参考价值。
例如,我从数据库中返回以下结果集合到控制台:
user_id | user_name | password
-----------------------------------------
0c4a4d | John Smith | n4i2k2oD
2d8d6c | Cindy Lee | yT4Lo7gz
......中间省略了不知道多少行
e9c78a | Betty Foler | prjCKe4d
5e3cb2 | Bill Preston | Qj4rmT5t
root@localhost>
请问如何把结果集的首行(即表头一行)到倒数第2行(user_id为“e9c78a”,但不能确定它是顺数第几行)之间的记录提取出来?
谢谢。
这里N是你要丢掉的最后N行,你的例子应该取1本回答被提问者采纳
根据shell脚本中的模式提取字符串
【中文标题】根据shell脚本中的模式提取字符串【英文标题】:Extract string based on pattern in shell script 【发布时间】:2021-09-25 04:07:11 【问题描述】:我正在编写一个脚本并停留在必须根据模式提取字符串的地方。 我曾尝试使用 awk 和 cut 但无法获得正确的结果。
这是我文件中的 3 行,我希望提取倒数第二列
预期输出
-
MxMonitor_Marvel_PI49
alert_manager
MxMonitor_Marvel_PI49
我尝试了以下最接近我得到的,但它只提取了几行而不是全部。
awk -F"," 'print $10' Filename.txt
文件内容
./subsearch_nested_fa89eeb0810630b9_1626351940.6/metadata.csv:2:"read : [ admin ], write : [ admin ]",admin,"MxMonitor_Marvel_PI49",300
./scheduler__nobody_YWxlcnRfbWFuYWdlcg__RMD5922da96313b0bb40_at_1626282000_20762/metadata.csv:2:"read : [ splunk-system-user ], write : [ splunk-system-user ]","splunk-system-user","alert_manager",86400
./subsearch_admin__admin_TXhNb25pdG9yX01hcnZlbF9QSTQ5__search12_1626351937.20757776_1626351938.1/metadata.csv:2:"read : [ admin ], write : [ admin ]",admin,"MxMonitor_Marvel_PI49",300
【问题讨论】:
【参考方案1】:$ awk -F'"' 'print $(NF-1)' file
MxMonitor_Marvel_PI49
alert_manager
MxMonitor_Marvel_PI49
【讨论】:
【参考方案2】:你可以试试这个更短的awk
:
awk 'gsub(/^.*,"|",.*/, "") 1' file
MxMonitor_Marvel_PI49
alert_manager
MxMonitor_Marvel_PI49
如此相似sed
:
sed -E 's/^.*,"|",.*//g' file
【讨论】:
【参考方案3】:使用您显示的示例,请尝试以下代码。将字段分隔符设置为,
,并从倒数第二个字段中删除开始、结束"
,最后打印出来。
awk -F, 'gsub(/^"|"$/,"",$(NF-1));print $(NF-1)' Input_file
【讨论】:
【参考方案4】:如果字段分隔符是逗号并且值可以选择用双引号括起来,对于示例数据,您可以使用"?,"?
将字段分隔符设置为可选双引号之间的逗号
awk -F '"?,"?' 'print $(NF-1)' file
输出
MxMonitor_Marvel_PI49
alert_manager
MxMonitor_Marvel_PI49
【讨论】:
以上是关于Shell编程中,如何提取输出记录中的从首行到倒数第n行之间的信息?的主要内容,如果未能解决你的问题,请参考以下文章