選択した行からスペースを削除する方法

選択した行からスペースを削除する方法

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行からスペースを削除します。仕組みは次のとおりです。この式は、3nsedに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

答え2

他の変形はawk

awk 'NR~/^[245]$/{$1=$1}1' OFS='' file

答え3

シェルを使用してこれを行うことができます。場合によってはそれほど価値があるかもしれません。しかし、それは頻繁ではないようです。

sh -fc  <in >out '
    for IFS do read -r l
        printf %s $l;echo
    done; exec cat
' -- '' \  '' \  \ 

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

答え4

誰かが「tr」を正しく表現し、解決策を宣言する必要があるため、次のようになります。

 tr -d [:space:]

または

 tr -d [:blank:]

テキストソースがichというファイルであるとします。

 cat ich | tr -d [:space:]

これにより、スペースなしで1行が生成されます。

fhtsqeghchtfhtrfhvfdgnqazxswedcvffhbchthbvhfplkoijuhygttfrdcvbhnju

この行を維​​持するには、次のバリアントを使用します。

 cat ./ich | tr -d [:blank:]

この出力を生成します(行間に追加の改行を除く)

ブケツコヘヒト

フッターフォーベルデゲン

qazxswedcvf

UHF

フルコユゲ

tfrdcvbhnju

親愛なる同僚の皆さん、あなたの答えは非常に興味深いです!

F.

関連情報