ファイルにユーザーグループのログインデータが含まれているとします。
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