Linuxでは、ファイルの選択された行からスペースを削除するのに小さな問題があります。
たとえば、
f h t s q e g h c h t
f h t r f h v f d g n
q a z x s w e d c v f
f h b c h t h b v h f
p l k o i j u h y g t
t f r d c v b h n j u
今、2行、4行、5行のスペースを削除するにはどうすればよいですか?また、3行目を見つける方法は?
ベストアンサー1
awkを使う
2、4、5行からスペースを削除するには、次のようにします。
$ awk 'NR==2 || NR==4 || NR==5 {gsub(/ /,"");} 1' file
f h t s q e g h c h t
fhtrfhvfdgn
q a z x s w e d c v f
fhbchthbvhf
plkoijuhygt
t f r d c v b h n j u
awkではNR
行番号です。論理式はNR==2 || NR==4 || NR==5
関心のある行を選択します。このコマンドはgsub(/ /,"")
その行からスペースを削除します。条件1
は、awkがその行の秘密の略語を印刷することです。
sedを使う
2、4、5行からスペースを削除するには、次のようにします。
$ sed '3n; 2,5 s/ //g' file
f h t s q e g h c h t
fhtrfhvfdgn
q a z x s w e d c v f
fhbchthbvhf
plkoijuhygt
t f r d c v b h n j u
ここでは少し異なるロジックを使用します。つまり、3行を除くすべての2〜5行からスペースを削除します。仕組みは次のとおりです。この式は、3n
sedに3行目に到達すると印刷し、次の行にジャンプするように指示します。それ以外の場合、 `2,5 s / // gコマンドはsedに2行から5行のすべてのスペースを削除するように指示します。
スペースだけでなく、すべてのスペースを削除します。
awk 'NR==2 || NR==4 || NR==5 {gsub(/[[:space:]]/,"");} 1' file
または:
sed '3n; 2,5 s/[[:space:]]//g' file