私の入力ファイルには次のデータが含まれています。
acb/xyz/row<t>
acb/xyz/row<t>
abc/xyz/row<b>
abc/xyz/row<b>
abc/xyz/row<0>
abc/xyz/row<0>
abc/xyz/row<1>
abc/xyz/row<1>
abc/xyz/row<2>
abc/xyz/row<2>
abc/xyz/row<3>
abc/xyz/row<3>
abc/xyz/row<4>
abc/xyz/row<4>
だから、出力は次のようになりたいです。
#Sector Top
acb/xyz/row<t>
acb/xyz/row<t>
#Sector Bottom
abc/xyz/row<b>
abc/xyz/row<b>
#Sector 0
abc/xyz/row<0>
abc/xyz/row<0>
#Sector 1
abc/xyz/row<1>
abc/xyz/row<1>
#Sector 2
abc/xyz/row<2>
abc/xyz/row<2>
#Sector 3
abc/xyz/row<3>
abc/xyz/row<3>
#Sector 4
abc/xyz/row<4>
abc/xyz/row<4>
- 上記の各セクタには複数行が含まれています。ここでは、セクタごとに2行だけを表示します。
- 上、下、0から30までのセクタがあります。ここでは最大4つのセクタを表示します。
セクタの1つを取得するためにsedコマンドを使用してみました。
sed '/row<1>/i #Sector 1' myfile
これは私に次のような結果を与えます:
#Sector 1
abc/xyz/row<1>
#Sector 1
abc/xyz/row<1>
すべてのゲームの前に改行する必要はなく、すべてのセクションの最初のゲームの前に改行するだけです。
ベストアンサー1
awkを使用してください。
$ cat tst.awk
BEGIN {
FS = "[<>]"
map["t"] = "Top"
map["b"] = "Bottom"
}
{
sector = $(NF-1)
if ( sector != prev ) {
print "#Sector", (sector in map ? map[sector] : sector)
prev = sector
}
print
}
$ awk -f tst.awk file
#Sector Top
acb/xyz/row<t>
acb/xyz/row<t>
#Sector Bottom
abc/xyz/row<b>
abc/xyz/row<b>
#Sector 0
abc/xyz/row<0>
abc/xyz/row<0>
#Sector 1
abc/xyz/row<1>
abc/xyz/row<1>
#Sector 2
abc/xyz/row<2>
abc/xyz/row<2>
#Sector 3
abc/xyz/row<3>
abc/xyz/row<3>
#Sector 4
abc/xyz/row<4>
abc/xyz/row<4>