我的数据就是这样的。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
date start stop durat cond acc_5 acc_6 dialled_number outg_trunk connected_num inc_trunk calling_num charged_num ring que
60512-09-56 66:65:99 66:90:65 0081212 NI 90000 912690 0050060055 56012975125 56012975125 8 0
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
date start stop durat cond acc_5 acc_6 dialled_number outg_trunk connected_num inc_trunk calling_num charged_num ring que
60512-09-56 66:67:59 66:95:55 00955 I 900012 9120512 0700050005 901299120512 901299120512 0 0
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
date start stop durat cond acc_5 acc_6 dialled_number outg_trunk connected_num inc_trunk calling_num charged_num ring que
60512-09-56 66:67:60 66:95:55 009512 NJ 90009 5000060069 05055 9120512 912999 5 0
endpoint endp_type codec_5 codec_6 cum_pack_lost pack_lost frac_lost mean_delay worst_delay mean_jitter worst_jitter R-value
50.9.0.56:57696 a_multiLim PCMA 0 0 0 0 65 0 0 996
----------------------------------------------------------------------------------------------------- ------------------------------------------------------------这只是数据的一个例子,它包含了数千行数据。我想找到包含"900012“之类的数据
所以我得到了
date start stop durat cond acc_5 acc_6 dialled_number outg_trunk connected_num inc_trunk calling_num charged_num ring que
60512-09-56 66:65:99 66:90:65 0081212 NI 90000 912690 0050060055 56012975125 56012975125 8 0
-----------------------------------------------------------------------------------------------------------------------------------------------------------------我知道我可以做"cat file.txt x grep 900012 -A1 -B1“,但有些行超过1行,下面一行。所以有没有办法让grep打印行,直到它点击“--”
我可以简单地在python或bash中这样做。但是我正在寻找一种我可以粘贴在bash中的一行东西,因为我会在数百个系统中使用它。也不想将文件等复制到每个系统中。
发布于 2014-03-20 10:35:17
这可以是一种使用awk的方法
awk '/^--/ { if (f) {print line} {f=0; line=""; next}}
/900012/ {f=1}
{if (line) {line=line RS $0} else {line=$0}}' file解释
/^--/ { if (f) {print line} {f=0; line=""; next}}在以--开头的行中,它检查是否设置了标志f。如果是,则打印缓冲数据。然后,它卸载f,清空缓冲行并跳转到下一行。/900012/ {f=1}如果该行与900012匹配,则触发标志f。{if (line) {line=line RS $0} else {line=$0}}在任意行中,缓冲变量line中的内容。对于示例输入,它返回:
$ awk '/^--/ { if (f) {print line} {f=0; line=""; next}} /900012/ {f=1} {if (line) {line=line RS $0} else {line=$0}}' file
date start stop durat cond acc_5 acc_6 dialled_number outg_trunk connected_num inc_trunk calling_num charged_num ring que
60512-09-56 66:67:59 66:95:55 00955 I 900012 9120512 0700050005 901299120512 901299120512 0 0https://stackoverflow.com/questions/22529537
复制相似问题