特定の文字から行を切り取る方法

特定の文字から行を切り取る方法

私のファイルには次のような行がたくさんあります。

word_word_word 0 word_word
word_word_word 1 wordwordword
word word word word 0 word word word word
word 2 word_word_word word word
word word_word 3 word

このファイルをキャプチャして次のような出力を取得したいと思います。

word_word_word 0
word_word_word 1
etc...

/awk/または他の行を切り取り、最初のバイトから最初の1桁まですべてを表示するにはどうすればよいですか?

ありがとうございます!

答え1

grepを使用してください:

grep -oP '^.*?\s[0-9](\s|$)' file

この-oオプションは、grepに一致するものだけを印刷するように指示します。

パターンは以下を探しています。

  • 行の始まり^
  • 以下は重複コンテンツです(欲はありません)。.*?
  • その後にスペースがあります\s
  • その後、0から9の間の単一の数字が続きます。[0-9]
  • 最後に、単一の数字の後にスペースまたは行末が続く必要があります。(\s|$)

答え2

for ループに awk を使用します。

awk '{
  for(i=1;i<=NF;i++){
    if($i ~ /[0-9]/){
      printf "%s\n",$i;
      break
    }
    printf "%s ",$i
  }
}' file

あなたが望むものを得るでしょう。

答え3

これが必要でない場合(すべてのUNIXシステムのすべてのシェルでsedを使用)、これが適用されない行を含むより良い例を提供するように質問を編集します。

$ sed 's/\( [0-9]\) .*/\1/' file
word_word_word 0
word_word_word 1
word word word word 0
word 2
word word_word 3

関連情報