파일의 일부 내용을 가져오기 위해 스크립트를 실행하는 방법

파일의 일부 내용을 가져오기 위해 스크립트를 실행하는 방법

파일에 사용자 그룹의 로그인 데이터가 포함되어 있다고 가정합니다.

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

여러 공간 처리

위의 예에는 모두 단일 공백이 있습니다. 날짜가 있는 파일의 경우 항목 사이에 공백이 하나 이상 있을 수 있는 경우그리고시간과 목적:

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

답변2

이것은 파이썬을 통해 달성됩니다.

import sys
import re
from collections import defaultdict
file = sys.argv[1]
f = open(file, 'r')
m = re.findall(r'(?m)^(\S+).*?\b(\d{4}-\d{2}-\d{2})(?=\()', f.read())
d = defaultdict(list)
for k, v in m:
    d[k].append(v)
result = dict(d.items())
for i in result:
    print(i)
    print('\n'.join([x for x in result[i]]))
    print('\n', end = "")

위 스크립트를 파일에 저장하고 script.py터미널에서 다음 명령을 실행하여 입력 파일에 대해 스크립트를 실행합니다.

python3 script.py inputfile

관련 정보