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”,但不能确定它是顺数第几行)之间的记录提取出来?

谢谢。

参考技术A head -n -3 test.txt

参考技术B head -n -N yourfile

这里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行之间的信息?的主要内容,如果未能解决你的问题,请参考以下文章

从文件夹中的所有文本文件中提取与模式匹配的行到单个输出文件

linux 如何批量提取文件最后几行

excel 输出指定行数据

解决shell脚本中echo怎么写入换行到文件

shell awk如何输出文件的指定列

【现学现忘&Shell编程】— 30.cut列提取命令