ファイルで文字列が見つかるたびに、最初の1行と最後の10行を削除したいと思います。
foo.txt
:
}
Name: john
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Line 11
Line 12
Apple
orange
grape
pine
}
Name: Ruben
Line
Line
Line
Line
Line
Line
Line
Line
Line
Line
grape
zebra
donkey
}
Name: Tom
Line
Line
Line
Line
Line
Line
Line
Line
Line
Line
Tiger
red
blue
orange
tomato
cat
}
期待するOut.txt
:
Name: john
Apple
orange
grape
pine
Name: Ruben
grape
zebra
donkey
Name: Tom
Tiger
red
blue
orange
tomato
cat
sed
または中かっこと名前:nawk
後の次の10行を削除したいと思います。 Solaris 5.10とksh
。
ベストアンサー1
awkを使う
$ awk '/}/{next;} /Name:/{print;n=NR+10} NR>n' file
Name: john
Apple
orange
grape
pine
Name: Ruben
grape
zebra
donkey
Name: Tom
Tiger
red
blue
orange
tomato
cat
どのように動作しますか?
/}/{next;}
インクルードをスキップします
}
。/Name:/{print;n=NR+10}
含める行に達すると、印刷してから10に現在の行番号を追加して設定し、
Name:
いつ再印刷を開始するかを確認できます。n
NR>n
現在の行番号が大きい場合は、
n
基本操作が行われます。行を印刷します。
sedを使う
非常に似たロジックを使用します。
$ sed -e '/}/d' -e '/Name:/{p;N;N;N;N;N;N;N;N;N;N;d;}' file
Name: john
Apple
orange
grape
pine
Name: Ruben
grape
zebra
donkey
Name: Tom
Tiger
red
blue
orange
tomato
cat
どのように動作しますか?
/}/d
含まれているものをすべて削除してください
}
。/Name:/{p;N;N;N;N;N;N;N;N;N;N;d;}
含まれている行が見つかったら、
Name:
印刷して次の10行を読み、削除します。
上記のカテゴリのいずれにも属さない行を印刷します。