ファイルの各行から5番目の単語を削除する方法は?

ファイルの各行から5番目の単語を削除する方法は?

ファイルの各行から5番目の単語を削除したいと思います。

現在のファイル内容:

File is not updated or and will be removed  
System will shut down f within 10 seconds  
Please save your work 55 or copy to other location  
Kindly cooperate with us D  

予想出力:

File is not updated and will be removed  
System will shut down within 10 seconds  
Please save your work or copy to other location  
Kindly cooperate with us

答え1

どうですかcut

$ cut -d' ' -f1-4,6- file.txt 
File is not updated and will be removed  
System will shut down within 10 seconds  
Please save your work or copy to other location  
Kindly cooperate with us
  • -d' '区切り文字をスペースに設定

  • -f1-4,6-最初から4番目のフィールド(単語)を選択し、5番目のフィールドを保持してから、6番目のフィールドから残りのフィールドまで印刷し続けます。

答え2

解決策cut

cut -d ' ' -f1-4 -f6- FILE

答え3

awk:5番目のフィールドを削除

awk '{for (i=5; i<NF; i++) $i = $(i+1); NF--};1' file

ファイルを所定の位置に保存するには:https://stackoverflow.com/q/16529716/7552

5番目のフィールドの内容を削除すると、2つの連続した出力フィールドの区切り文字が残ります。

awk '{$5 = ""};1' file

答え4

グレン同等のソリューションを提供します

awk '{$5="";印刷}'文書

彼と他の人が指摘したように、これは

  1. 各行の先頭と末尾のスペースを削除し、
  2. 各スペース文字列(スペースおよび/またはタブ)を単一のスペースに圧縮します。
  3. 4番目の単語と6番目の単語の間には2つのスペースを入れます。

第三の問題を解決する秘訣は

awk '{$5="";印刷}'文書| sed ///'

これにより、5つ以下の単語を含む行の末尾には1つ以上の余分なスペースが残ります。入力にまったく表示されない単語を識別できる場合は、

awk '{$5="ユニコーン";印刷}'文書| sed 's/ *ユニコーン//'

それにもかかわらず(しかし依然として質問1と2を残します)。

関連情報