ファイルの各行から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="";印刷}'文書
彼と他の人が指摘したように、これは
- 各行の先頭と末尾のスペースを削除し、
- 各スペース文字列(スペースおよび/またはタブ)を単一のスペースに圧縮します。
- 4番目の単語と6番目の単語の間には2つのスペースを入れます。
第三の問題を解決する秘訣は
awk '{$5="";印刷}'文書| sed ///'
これにより、5つ以下の単語を含む行の末尾には1つ以上の余分なスペースが残ります。入力にまったく表示されない単語を識別できる場合は、
awk '{$5="ユニコーン";印刷}'文書| sed 's/ *ユニコーン//'
それにもかかわらず(しかし依然として質問1と2を残します)。