ファイルの一部の内容を取得するためにスクリプトを実行する方法

ファイルの一部の内容を取得するためにスクリプトを実行する方法

ファイルにユーザーグループのログインデータが含まれているとします。

bobby activityname 2014-05-12([email protected])
bill activityname 2014-06-12([email protected])
bobby activityname 2014-06-12([email protected])

人々の名前とログインした日付を表示するcewファイルを作成するスクリプトをどのように作成できますか?

bill
2014-06-12
bobby
2014-05-12 
2014-06-12

ベストアンサー1

$ awk -F'[ (]' '{a[$1]=a[$1] $3 "\n"} END{for (name in a)print name "\n" a[name]}' loginFile
bobby
2014-05-12
2014-06-12

bill
2014-06-12

どのように動作しますか?

  • -F'[ (]'

    これは、awkフィールド区切り文字としてスペースまたは左角かっこを許可するように指示します。

  • a[$1]=a[$1] $3 "\n"

    これにより、各ユーザーのログイン日が配列に保存されますa

  • END{for (name in a)print name "\n" a[name]}

    ファイルの読み取りが終わったら、収集したデータを印刷します。

出力をファイルとして保存

出力をファイルに保存するには、シェルを使用できますリダイレクト。したがって:

awk -F'[ (]' '{a[$1]=a[$1] $3 "\n"} END{for (name in a)print name "\n" a[name]}' loginFile >newFile

処理日そして一度

入力ファイルが次のようになるとします。

$ cat loginFile2 
bobby activityname 2014-05-12 15:20([email protected]) 

日付と時刻を取得するには、次を実行します。

$ awk -F'[ (]' '{a[$1]=a[$1] $3 " " $4 "\n"} END{for (name in a)print name "\n" a[name]}' loginFile2
bobby
2014-05-12 15:20

複数の空間処理

上記の例には、すべて単一のスペースがあります。日付を含むファイルの場合、項目間にスペースが1つ以上ある場合そして時間と目的:

awk -F' *[ (]' '{a[$1]=a[$1] $3 " " $4 "\n"} END{for (name in a)print name "\n" a[name]}' loginFile

おすすめ記事