awkを使用して列の一部を削除する方法

awkを使用して列の一部を削除する方法

私はこれを持っています:

2018:01:02-23:52:48
2018:01:02-23:52:48
2018:01:02-23:52:48
2018:01:03-09:26:20
2018:01:03-09:26:20

1日にメッセージ数に基づいて並べ替えるために、日付は維持し、時間は維持したいと思います。

2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03

可能であれば、このようにしたいと思いますawk

答え1

  • アッ

    awk -F- '$0=$1' file
    
  • 切る

    cut -d- -f1 file
    
  • sed

    sed 's/-.*//' file
    
  • 真珠

    perl -pe 's/-.*//' file
    

答え2

簡単にawk:

awk -F'-' '{ print $1 }' file
  • -F'-'- -(ダッシュ)をフィールド区切り文字として扱います。

しかし、単純な場合、grepアプローチはより簡単です。

grep -o '^[^-]*' file

答え3

入力したらただタイムスタンプを含めると、ダッシュをフィールド区切り文字に設定し、最初のフィールドのみを印刷するのが簡単です。

$ awk -F- '{print $1}' input
2018:01:02
2018:01:02

input2しかし、その中に他の内容が含まれている場合

2018:01:02-23:52:48 some data 
2018:01:02-23:52:48 something else

これにより、行の残りの部分が削除され、他の処理のためにフィールド区切り文字も変更したくありません。ただし、最初のフィールドを簡単に置き換えて結果行を印刷することはできます。

$ awk '{sub(/-.*/, "", $1)} 1' input2
2018:01:02 some data
2018:01:02 something else

答え4

以下のawkサブストリングメソッドで同じ効果を得ました。

 awk '{print substr($1,1,10)}'  filename

出力

2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03

関連情報