
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
答え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.