Unixシェルコマンドを使用してファイルの途中で何行を印刷するには? [閉鎖]

Unixシェルコマンドを使用してファイルの途中で何行を印刷するには? [閉鎖]

私のファイルには次の行が含まれています。

$BQ  
{ VOL       @home    }  
database    daba  
relation    tcdeatid  
opendb  
clear    
.lruno := 72         <-- (This line lruno. := 72 has 10 times in my file1)
.infno := 1  
.tid.noel := 101       
writedb       
clear  
.lruno := 72  
.infno := 205  
.tid.noel := 191      
writedb       
clear    
$EOF

ファイル2では、以下のファイル1のこの部分のみが必要です。

$BQ  
{ VOL       @home    }  
database    daba  
relation    tcdeatid  
opendb  
clear
.lruno := 72           
.infno := 1  
.tid.noel := 101  
.lruno := 72           
.infno := 205  
.tid.noel := 191
.lruno := 72           
.infno := 0  
.tid.noel := 1111  
.lruno := 72           
.infno := 56  
.tid.noel := 231
.lruno := 72           
.infno := 45  
.tid.noel := 61  
.lruno := 72           
.infno := 23  
.tid.noel := 901
.lruno := 72           
.infno := 123  
.tid.noel := 1611  
.lruno := 72           
.infno := 786  
.tid.noel := 81
.lruno := 72           
.infno := 55  
.tid.noel := 1  
.lruno := 72           
.infno := 253  
.tid.noel := 121
writedb       
clear  
$EOF

file1のシェルコマンドを使用して、このコードブロック(lruno.:= 72)を別のファイルに入れたいと思います。ファイルを読み込み、lrunoの数を数えるコマンドが必要です。 := 72 in file1 で、その合計を別のファイルに書き込みます。

答え1

sedを使う

.lruno := 72その後、次から始まり、続く行を選択してclear要求された出力を生成します。

$ sed -n '/.lruno := 72/,/clear/p' file
.lruno := 72
.infno := 1
.tid.noel := 101
.tid.info := 64
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 72
.infno := 205
.tid.noel := 101
.tid.info := 76
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear

仕組み:-nsedに要求しない限り印刷しないように指示します。で始まり終わる/.lruno := 72/,/clear/pすべての範囲を印刷するように指示します。.lruno := 72clear

awkを使う

awkを使用して同じアプローチを使用することもできます。

awk '/.lruno := 72/,/clear/' file

sedと同様に、で始まり/.lruno := 72/,/clear/終わる行グループが選択されます。選択した行に指定されたジョブがないため、awkはそれを印刷する基本的な操作を実行します。.lruno := 72clear

答え2

使用sed:

< inputfile sed '1,6d; $d' > outputfile
  • < inputfile:コンテンツを「s」inputfileにリダイレクトします。sedstdin
  • > outputfilesed:コンテンツをstdout次にリダイレクトします。outputfile
  • 1,6d: 1行目から6行目まですべて削除
  • $d: 最後の行を削除

出力例:

~/tmp$ cat inputfile
$BQ
{ VOL @home }
database daba
relation tcdeatid
opendb
clear
.lruno := 72
.infno := 1
.tid.noel := 101
.tid.info := 64
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 72
.infno := 205
.tid.noel := 101
.tid.info := 76
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 18
.infno := 2
.tid.noel := 100
.tid.info := 34
.tid.setnr := 125
.typeidm := 9
.sourcetable := 2
writedb
clear
.lruno := 18
.infno := 25
.tid.noel := 1101
.tid.info := 71
.tid.setnr := 1425
.typeidm := 1
.sourcetable := 3
writedb
clear
$EOF
~/tmp$ < inputfile sed '1,6d; $d'
.lruno := 72
.infno := 1
.tid.noel := 101
.tid.info := 64
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 72
.infno := 205
.tid.noel := 101
.tid.info := 76
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 18
.infno := 2
.tid.noel := 100
.tid.info := 34
.tid.setnr := 125
.typeidm := 9
.sourcetable := 2
writedb
clear
.lruno := 18
.infno := 25
.tid.noel := 1101
.tid.info := 71
.tid.setnr := 1425
.typeidm := 1
.sourcetable := 3
writedb
clear
~/tmp$ 

関連情報