さまざまな変数に可能な値の範囲を含むテキストファイルがあります。
1. life: short,long,na.
2. weather_f: cloudy,rainy,sunny,foggy,cold,warm,mild,
humid,na.
3. sea_temp: warm,mild,cold,na.
以下のような出力ファイルを取得したいと思います。
short,long,na
cloudy,rainy,sunny,foggy,cold,warm,mild,humid,na
warm,mild,cold,na
私はこれを試してみましたsed
が、新しいラインweather_f
のために困難を経験しました。予想される結果をどのように取得できますか?
ベストアンサー1
行がカンマで終わったら、すぐに次の行をバッファに追加します。これはsed
式を使用して行われます。
/,$/N
このN
コマンドは、改行文字を2つの区切り文字として使用して、バッファ内のテキストに次の行を追加します。
これらの連続した複数行を許可するには、ループの先頭に戻り、バッファーの末尾にコンマがあることを確認してください。
:again
/,$/ {
N
# branch to the "again" label at the top
b again
}
その後、バッファに行を追加する必要はなくなり、線を切り取り、必要に応じて配置できます。これには、最初の文字の前のすべての項目の削除、スペースに:
似たすべての文字(挿入された改行を含むN
)の削除、および末尾の点の削除が含まれます。
s/[^:]*://
s/[[:space:]]//g
s/\.$//
完全な編集スクリプトは次のとおりです。
:again
/,$/ {
N
b again
}
s/[^:]*://
s/[[:space:]]//g
s/\.$//
これはファイル(ここ)のスクリプトを使用してscript
行うことができます。
sed -f script file
または、コマンドラインにスクリプトを入力するには
sed -e :again \
-e '/,$/ { N; b again; }' \
-e 's/[^:]*://' \
-e 's/[[:space:]]//g' \
-e 's/\.$//' file
あなたの質問にデータが与えられると、次のものが出力されます。
short,long,na
cloudy,rainy,sunny,foggy,cold,warm,mild,humid,na
warm,mild,cold,na
一部の実装には独自の表現がsed
必要な場合があります。b again
sed -e :again \
-e '/,$/ { N' -e 'b again' -e '}' \
-e 's/[^:]*://' \
-e 's/[[:space:]]//g' \
-e 's/\.$//' file