UNIX Shell脚本只获得需要从文件内容行 [英] Unix Shell Script get only needed lines from a file content

查看:236
本文介绍了UNIX Shell脚本只获得需要从文件内容行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

修改

我有一个包含字符串的行的文件

  mediafire.com/?a6o37kfc7m68dri

注:媒体防火该文件实际上是logs.out我刚刚重新命名为logs.txt当我uploded它

例如内容:(logs.out)

  BIF在bif_init>登陆成功
BIF在DBINIT>信息:DB状态:20,成功的
BIF在DBINIT> INFO:获取文件名需要时查询数据库。尺寸(0)
BIF在DBINIT> INFO:获取文件名需要时查询数据库。尺寸(30)
BIF在modInit> INFO:modInit完成
BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 4302253
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 199863752
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1
BIF在setInputTag>设置输入标签值,名称/值:DISPUTE_AMOUNT / 0
BIF在setInputTag>设置输入标签值,名称/值:NOD_FLAG / 0
BIF在setInputTag>设置输入标签值,名称/值:OUTSTANDING_BALANCE / 12904
BIF在setInputTag>设置输入标签值,名称/值:TOTAL_DUE / ​​12904
BIF在运行> INFO:updateParameterValues​​完成
BIF中的GetFile> INFO:当前发票Feed文件(/arbordata/feedfile/PS-M07-1205-20130807-20130911-201711-1-bif01.DAT)
BIF在insertNewFile> m_pcurFileNameAttr-> file_seq_no:(1)
BIF在insertNewFile> INFO:输出FileHeader里(000020130911201711
    ),以feedfile,成功
BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 4302253
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 199863752
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1
BIF在setInputTag>设置输入标签值,名称/值:DISPUTE_AMOUNT / 0
BIF在setInputTag>设置输入标签值,名称/值:NOD_FLAG / 0
BIF在setInputTag>设置输入标签值,名称/值:OUTSTANDING_BALANCE / 12904
BIF在setInputTag>设置输入标签值,名称/值:TOTAL_DUE / ​​12904
BIF在addInheritedByField>信息:成功把现场(BILLZIP code)项的继承值到ACCT地图
BIF在addInheritedByField>信息:成功把现场(BILLEDACCOUNTNUMBER)的继承值到ACCT地图
BIF在addInheritedByField>信息:成功把现场(BILLNUMBER)的继承值到ACCT地图
BIF在addInheritedByField>信息:成功把现场(BILLNUMBERRESETS)的继承值到ACCT地图
BIF在addInheritedByField>信息:成功把现场(OWNINGACCOUNTNUMBER)的继承值到SI inherited_map
BIF在addInheritedByField>信息:成功把现场(SUBSCRBNUMBER)的继承值到SI inherited_map
BIF在addInheritedByField>信息:成功把现场(SUBSCRBNUMBERRESET)的继承值到SI inherited_map
BIF在addInheritedByField>信息:成功把现场(DEFAULTEXTERNALID)的继承值到SI inherited_map
BIF在InvoiceRecord>信息:输出数据为SI地图,成功的。 SI = 2813096,0
BIF在addInheritedByField>信息:成功把现场(OWNINGACCOUNTNUMBER)的继承值到SI inherited_map
BIF在addInheritedByField>信息:成功把现场(SUBSCRBNUMBER)的继承值到SI inherited_map
BIF在addInheritedByField>信息:成功把现场(SUBSCRBNUMBERRESET)的继承值到SI inherited_map
BIF在addInheritedByField>信息:成功把现场(DEFAULTEXTERNALID)的继承值到SI inherited_map
BIF在InvoiceRecord>信息:输出数据为SI地图,成功的。 SI = 13415970,0
BIF在addInheritedByField>信息:成功把现场(OWNINGACCOUNTNUMBER)的继承值到SI inherited_map
BIF在addInheritedByField>信息:成功把现场(SUBSCRBNUMBER)的继承值到SI inherited_map
BIF在addInheritedByField>信息:成功把现场(SUBSCRBNUMBERRESET)的继承值到SI inherited_map
BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 2726650
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 190155402
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1
BIF在setInputTag>设置输入标签值,名称/值:DISPUTE_AMOUNT / 0
BIF在setInputTag>设置输入标签值,名称/值:NOD_FLAG / 0
BIF在setInputTag>设置输入标签值,名称/值:OUTSTANDING_BALANCE / 164888
BIF在setInputTag>设置输入标签值,名称/值:TOTAL_DUE / ​​164888
BIF在运行> INFO:updateParameterValues​​完成
BIF中的GetFile> INFO:当前发票Feed文件(/arbordata/feedfile/PS-M02-1204-20130602-20130911-201711-1-bif01.DAT)
BIF在insertNewFile> m_pcurFileNameAttr-> file_seq_no:(1)
BIF在insertNewFile> INFO:输出FileHeader里(000020130911201711
),以feedfile,成功
BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 2726650
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 190155402
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1
BIF在setInputTag>设置输入标签值,名称/值:DISPUTE_AMOUNT / 0
BIF在setInputTag>设置输入标签值,名称/值:NOD_FLAG / 0
BIF在setInputTag>设置输入标签值,名称/值:OUTSTANDING_BALANCE / 164888
BIF在setInputTag>设置输入标签值,名称/值:TOTAL_DUE / ​​164888
BIF在addInheritedByField>信息:成功把现场(BILLZIP code)项的继承值到ACCT地图
BIF在addInheritedByField>信息:成功把现场(BILLEDACCOUNTNUMBER)的继承值到ACCT地图
BIF在addInheritedByField>信息:成功把现场(BILLNUMBER)的继承值到ACCT地图
BIF在addInheritedByField>信息:成功把现场(BILLNUMBERRESETS)的继承值到ACCT地图
BIF在addInheritedByField>信息:成功把现场(OWNINGACCOUNTNUMBER)的继承值到SI inherited_map

只有想有一行:

  BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 4302253
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 199863752
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 4302253
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 199863752
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 2726650
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 190155402
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 2726650
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 190155402
BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1

和我要输出它与像这样格式的文件:(horizo​​ntaly和管道分隔符)

  BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 4302253 | BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 199863752 | BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1
BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 4302253 | BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 199863752 | BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1
BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 2726650 | BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 190155402 | BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1
BIF在setInputTag>设置输入标签值,名称/值:account_no上/ 2726650 | BIF在setInputTag>设置输入标签值,名称/值:bill_ref_no / 190155402 | BIF在setInputTag>设置输入标签值,名称/值:bill_ref_resets / 1

请帮助我:(
    我想创建.SH文件,它会在运行腻子

执行此$ C $当c,它正在

  SED -n -e'/value:ACCOUNT_NO/{N;N;s/..\
\\(.\\)/|\\1/g;p;}' logs.out> OUPUT_logs.out

但是当

  SED -n -e'/value:ACCOUNT_NO/{N;N;s/..\
\\(.\\)/|\\1/g;p;}' logs.out> OUPUT_logs.txt

疗法是空行每条记录的。


解决方案

  SED -n -e'/值:account_no上/ {N; N; S / \\ N / | / g的; p;}logs.txt> outfile.txt

编辑:

我修改了上面的命令,以将输出重定向到一个文件,但我们纠正它输出更重要。我测试过使用例如 logs.txt 你给的命令;我不知道有足够的了解您的系统,说为什么这是行不通的存在,让我们的实验。试试这个:

  SED -n -e'/值:account_no上/ P'logs.txt

什么是输出?

编辑:

到目前为止,一切都很好。现在试试这个:

  SED -n -e'/值:account_no上/ {磷;}'logs.txt

相同的输出?

编辑:

好!现在:

  SED -n -e'/值:account_no上/ {N; N; P;}'logs.txt

什么是输出?

编辑:

最后一步,我们重定向到 outputfile.txt ,然后取出换行。作为@ ChrisJester-Young说,我们可以删除尾随空格在相同的步骤:

  SED -n -e'/值:account_no上/ {N; N; S / \\ N / | /; p;}'logs.txt> outputfile.txt

修改

试试这个,让我们把它叫做 code 6

  SED -n -e'/value:ACCOUNT_NO/{N;N;s/..\
/|/g;p;}'logs.txt> outputfile.txt

编辑:

问题是,你的 logs.txt 具有DOS风格的行结束。我认为,code 6它们更改为UNIX风格,超编辑警告你,他们很奇怪。试试这个( code 7

  SED -n -e'/value:ACCOUNT_NO/{N;N;s/..\
\\(.\\)/|\\1/g;p;}'

EDIT

I have a file containing line of strings

mediafire.com/?a6o37kfc7m68dri

NOTE: that file on media fire is actually "logs.out" i've just renamed it to logs.txt when i uploded it.

example Content:(logs.out)

BIF in bif_init> login successful
BIF in dbInit> INFO: DB status:20,successful
BIF in dbInit> INFO: get the fileName need be query DB. Size(0) 
BIF in dbInit> INFO: get the fileName need be query DB. Size(30) 
BIF in modInit> INFO: modInit finished
BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/4302253 
BIF in setInputTag> set input tag value, name/value:bill_ref_no/199863752 
BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 
BIF in setInputTag> set input tag value, name/value:DISPUTE_AMOUNT/0 
BIF in setInputTag> set input tag value, name/value:NOD_FLAG/0 
BIF in setInputTag> set input tag value, name/value:OUTSTANDING_BALANCE/12904
BIF in setInputTag> set input tag value, name/value:TOTAL_DUE/12904 
BIF in run> INFO: updateParameterValues finished
BIF in getFile> INFO: Feed file(/arbordata/feedfile/PS-M07-1205-20130807-20130911-201711-1-bif01.DAT) for current invoice
BIF in insertNewFile> m_pcurFileNameAttr->file_seq_no:(1)  
BIF in insertNewFile> INFO:Output fileHeader(000020130911201711
    ) to feedfile,successful 
BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/4302253 
BIF in setInputTag> set input tag value, name/value:bill_ref_no/199863752 
BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 
BIF in setInputTag> set input tag value, name/value:DISPUTE_AMOUNT/0 
BIF in setInputTag> set input tag value, name/value:NOD_FLAG/0 
BIF in setInputTag> set input tag value, name/value:OUTSTANDING_BALANCE/12904
BIF in setInputTag> set input tag value, name/value:TOTAL_DUE/12904 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(BILLZIPCODE) into ACCT map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(BILLEDACCOUNTNUMBER) into ACCT map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(BILLNUMBER) into ACCT map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(BILLNUMBERRESETS) into ACCT map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(OWNINGACCOUNTNUMBER) into SI inherited_map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(SUBSCRBNUMBER) into SI inherited_map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(SUBSCRBNUMBERRESET) into SI inherited_map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(DEFAULTEXTERNALID) into SI inherited_map 
BIF in InvoiceRecord> INFO: Output data to SI map,successful. SI=2813096,0
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(OWNINGACCOUNTNUMBER) into SI inherited_map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(SUBSCRBNUMBER) into SI inherited_map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(SUBSCRBNUMBERRESET) into SI inherited_map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(DEFAULTEXTERNALID) into SI inherited_map 
BIF in InvoiceRecord> INFO: Output data to SI map,successful. SI=13415970,0
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(OWNINGACCOUNTNUMBER) into SI inherited_map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(SUBSCRBNUMBER) into SI inherited_map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(SUBSCRBNUMBERRESET) into SI inherited_map
BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/2726650 
BIF in setInputTag> set input tag value, name/value:bill_ref_no/190155402 
BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 
BIF in setInputTag> set input tag value, name/value:DISPUTE_AMOUNT/0 
BIF in setInputTag> set input tag value, name/value:NOD_FLAG/0 
BIF in setInputTag> set input tag value, name/value:OUTSTANDING_BALANCE/164888
BIF in setInputTag> set input tag value, name/value:TOTAL_DUE/164888 
BIF in run> INFO: updateParameterValues finished
BIF in getFile> INFO: Feed file(/arbordata/feedfile/PS-M02-1204-20130602-20130911-201711-1-bif01.DAT) for current invoice
BIF in insertNewFile> m_pcurFileNameAttr->file_seq_no:(1)  
BIF in insertNewFile> INFO:Output fileHeader(000020130911201711
) to feedfile,successful 
BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/2726650 
BIF in setInputTag> set input tag value, name/value:bill_ref_no/190155402 
BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 
BIF in setInputTag> set input tag value, name/value:DISPUTE_AMOUNT/0 
BIF in setInputTag> set input tag value, name/value:NOD_FLAG/0 
BIF in setInputTag> set input tag value, name/value:OUTSTANDING_BALANCE/164888
BIF in setInputTag> set input tag value, name/value:TOTAL_DUE/164888 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(BILLZIPCODE) into ACCT map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(BILLEDACCOUNTNUMBER) into ACCT map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(BILLNUMBER) into ACCT map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(BILLNUMBERRESETS) into ACCT map 
BIF in addInheritedByField> INFO: Succeed to put the inherited value of field(OWNINGACCOUNTNUMBER) into SI inherited_map 

Only line that wanted to have:

BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/4302253
BIF in setInputTag> set input tag value, name/value:bill_ref_no/199863752 
BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1

BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/4302253 
BIF in setInputTag> set input tag value, name/value:bill_ref_no/199863752 
BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 

BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/2726650 
BIF in setInputTag> set input tag value, name/value:bill_ref_no/190155402 
BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 

BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/2726650 
BIF in setInputTag> set input tag value, name/value:bill_ref_no/190155402 
BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 

and i want to output it into a file with the format like this:(horizontaly and with pipe delimiter)

BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/4302253|BIF in setInputTag> set input tag value, name/value:bill_ref_no/199863752|BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 
BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/4302253|BIF in setInputTag> set input tag value, name/value:bill_ref_no/199863752|BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1
BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/2726650|BIF in setInputTag> set input tag value, name/value:bill_ref_no/190155402|BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1
BIF in setInputTag> set input tag value, name/value:ACCOUNT_NO/2726650|BIF in setInputTag> set input tag value, name/value:bill_ref_no/190155402|BIF in setInputTag> set input tag value, name/value:bill_ref_resets/1 

PLEASE HELP ME :( I want to create .sh file and it will run on PuTTy

when executing this code it is working

sed -n -e '/value:ACCOUNT_NO/{N;N;s/..\n\(.\)/|\1/g;p;}' logs.out> OUPUT_logs.out

BUT WHEN

sed -n -e '/value:ACCOUNT_NO/{N;N;s/..\n\(.\)/|\1/g;p;}' logs.out> OUPUT_logs.txt

ther is "BLANK LINE" between every record.

解决方案

sed -n -e '/value:ACCOUNT_NO/{N;N;s/\n/|/g;p;}' logs.txt > outfile.txt

EDIT:

I've modified the command above to redirect the output to a file, but it's more important that we correct the output. I've tested the command using the example logs.txt you gave; I don't know enough about your system to say why it doesn't work there, so let us experiment. Try this:

sed -n -e '/value:ACCOUNT_NO/p' logs.txt

What is the output?

EDIT:

So far, so good. Now try this:

sed -n -e '/value:ACCOUNT_NO/{p;}' logs.txt

Same output?

EDIT:

Good! Now:

sed -n -e '/value:ACCOUNT_NO/{N;N;p;}' logs.txt

What is the output?

EDIT:

Last step, we redirect to outputfile.txt and remove the newlines. As @ChrisJester-Young said, we can remove the trailing spaces in the same step:

sed -n -e '/value:ACCOUNT_NO/{N;N;s/ \n/|/;p;}' logs.txt > outputfile.txt

EDIT

Try this, and let's call it code 6:

sed -n -e '/value:ACCOUNT_NO/{N;N;s/..\n/|/g;p;}' logs.txt > outputfile.txt

EDIT:

The problem is that your logs.txt has DOS-style line endings. I think that Code 6 changes them to UNIX-style, and ultra edit is warning you that they are strange. Try this (code 7):

sed -n -e '/value:ACCOUNT_NO/{N;N;s/..\n\(.\)/|\1/g;p;}'

这篇关于UNIX Shell脚本只获得需要从文件内容行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆