2016-09-17 1 views
-2
name1 20160801|76 20160802|67 20160803|49 20160804|35 20160805|55 20160806|76 20160807|77 20160808|70 2016089|50 20160810|75 20160811|97 20160812|90 20160813|87 20160814|99 20160815|113 20160816|83 20160817|57 20160818|158 20160819|61 20160820|46 20160821|1769608 20160822|2580938 20160823|436093 20160824|75 20160825|57 20160826|70 20160827|97 20160828|101 20160829|96 20160830|95 20160831|89 
name2 20160801|32413 20160802|37707 20160803|32230 20160804|31711 20160805|32366 20160806|35532 20160807|36961 20160808|45423 2016089|65230 20160810|111078 20160811|74357 20160812|71196 20160813|71748 20160814|77001 20160815|91687 20160816|92076 20160817|89706 20160818|126690 20160819|168587 20160820|207128 20160821|221440 20160822|234594 20160823|200963 20160824|165231 20160825|139600 20160826|145483 20160827|209013 20160828|228550 20160829|223712 20160830|217959 20160831|169106 

파일에서 두 줄의 줄 위치는 line1과 line2입니다. 이 줄은 파일의 어느 곳에 나있을 수 있지만 각 줄의 이름 (첫 번째 단어)을 기반으로 검색 키워드를 사용하여 줄 위치에 액세스 할 수 있습니다.awk를 사용하는 파일에서 두 줄의 해당 값 비교.

20160801은 yyyymmdd를 의미하며 관련 값은 | 주어진 두 줄의 각 날짜와 관련된 값을 비교해야합니다.

나는 awk의 초보자입니다. 나는이 두 줄을 동시에 비교하는 방법을 이해하지 못하고있다.

+1

나는 이해하지 못한다. 1)'name1'과'name2'는 각각의 파일에 대해 유일한 값을 갖고 있습니까? 즉, 파일 당 1 개 이상이 필요합니까? 파일 1의 이름 1과 파일 2의 이름 2를 찾고 각 행의 날짜 문자열을 비교하면됩니까? – dawg

+0

이름 1 이름 2는 파일 전체에서 고유합니다. 각 줄마다 31 일이 있습니다. 다음 날은 그 날의 파이프 세퍼레이트 값입니다. 두 줄의 날짜를 비교해야합니다. 각 라인은 주어진 달의 31 일을 가지고 있습니다. 따라서 날짜와 위치는 파일에서 동일합니다 – joe

+1

비교하고 무엇을합니까? 예상되는 결과는 무엇입니까? – karakfa

답변

0

귀하의 질문에 전혀 문제가 없습니다. 아마도 첫 번째 단계는 분명히 명확하게 표현하는 것입니다. 1) 내가 풀려고하는 문제는 무엇입니까? 2) 어떤 도구 또는 데이터로 해결해야합니까?

질문 (문제 문이 명확하게 관절되지 않기 때문에) 내가 제공 할 수있는 특정 유일한 힌트

다음과 같습니다

  1. AWK, 당신은 테스트 FNR==NR를 사용하여 두 개의 서로 다른 파일을 비교할 수 있습니다 첫 번째 파일에서만 true입니다.

  2. 당신은 그 패턴으로 시작하는 라인을 의미 형태 /^name1/의 정규 표현식을 사용하여 핵심 단어를 찾을 수 있습니다
  3. 당신은 그 구분에 필드 분리를 설정하여 AWK의 구분에 분할 할 수

    - -이 경우 (내 생각에) 그것은 | 인 것처럼 들리지만 그 필드 안의 공백으로 구분 된 필드를 비교하고 있습니까?

  4. 첫 번째 줄의 데이터를 저장하고 다른 파일의 두 번째 줄의 데이터와 비교하면 '비교'의 의미를 분명하게 나타낼 수 있습니다. (난 단지 명확성을 위해 첫 번째 필드를 인쇄 한)

    $ awk -F"|" '/^name/ && FNR==NR {print $1}' f1.txt f2.txt 
    name1 20160801 
    $ awk -F"|" '/^name/ && FNR<NR {print $1}' f1.txt f2.txt 
    name2 20160801 
    

    :

    $ cat /tmp/f1.txt 
    name1 20160801|76 20160802|67 20160803|49 20160804|35 20160805|55 20160806|76 20160807|77 20160808|70 2016089|50 20160810|75 20160811|97 20160812|90 20160813|87 20160814|99 20160815|113 20160816|83 20160817|57 20160818|158 20160819|61 20160820|46 20160821|1769608 20160822|2580938 20160823|436093 20160824|75 20160825|57 20160826|70 20160827|97 20160828|101 20160829|96 20160830|95 20160831|89 
    $ cat /tmp/f2.txt 
    name2 20160801|32413 20160802|37707 20160803|32230 20160804|31711 20160805|32366 20160806|35532 20160807|36961 20160808|45423 2016089|65230 20160810|111078 20160811|74357 20160812|71196 20160813|71748 20160814|77001 20160815|91687 20160816|92076 20160817|89706 20160818|126690 20160819|168587 20160820|207128 20160821|221440 20160822|234594 20160823|200963 20160824|165231 20160825|139600 20160826|145483 20160827|209013 20160828|228550 20160829|223712 20160830|217959 20160831|169106 
    

    당신은 그래서 같은 문제의 라인을 찾을 수 있습니다 주어진

이를 포장,

그런 다음이를 사용하여 비교하십시오. 첫 번째를 연관 배열에 저장 한 다음 두 번째를 비교하면 비교됩니다.

관련 문제