이것은 gawk 4.0.0과 함께 cygwin과 함께 Windows 7에서 실행됩니다. 이 프로그램은 내가 다음과 같습니다 일부 데이터가awk에서 기본 인쇄를 억제하는 방법은 무엇입니까?
gawk -f procjournal.gawk testdata
처럼 호출됩니다
"Date";"Type";"Amount";"Balance"
"6/11/2013 11:51:17 AM";"Transaction Tax";-427.5;399313884.46
"6/11/2013 11:51:17 AM";"Market Transaction";47500;399314311.96
"6/11/2013 11:12:42 AM";"Transaction Tax";-549.92;399266811.96
"6/11/2013 11:12:42 AM";"Market Transaction";61101.78;399267361.88
내가 트랜잭션에 대한 행을 추출하는 제 1 필드에서 날짜 부분을 제거하고, 시간을 포맷 할 십진수로 찍 힙니다. 나는이 AWK 프로그램을 함께 할 수 있다고 생각 :
FS=";"
OFS=";"
/Market Transaction/ {
split($1, itemdate, " ");
tmp = itemdate[2];
split(tmp, hms, ":");
timestamp = hms[3] + (hms[2] * 60) + (hms[1] * 3600);
if (itemdate[3] == "AM")
timestamp += 12 * 3600;
timestamp /= 3600.0;
$1 = timestamp;
print;
}
하지만 내 출력은 다음과 같습니다
"Date";"Type";"Amount";"Balance"
"Date";"Type";"Amount";"Balance"
"6/11/2013 11:51:17 AM";"Transaction Tax";-427.5;399313884.46
"6/11/2013 11:51:17 AM";"Transaction Tax";-427.5;399313884.46
"6/11/2013 11:51:17 AM";"Market Transaction";47500;399314311.96
"6/11/2013 11:51:17 AM";"Market Transaction";47500;399314311.96
11.8547;"Market Transaction";47500;399314311.96
"6/11/2013 11:12:42 AM";"Transaction Tax";-549.92;399266811.96
"6/11/2013 11:12:42 AM";"Transaction Tax";-549.92;399266811.96
"6/11/2013 11:12:42 AM";"Market Transaction";61101.78;399267361.88
"6/11/2013 11:12:42 AM";"Market Transaction";61101.78;399267361.88
11.2117;"Market Transaction";61101.78;399267361.88
왜 비 일치하는 선이 인쇄되고, 내가 그것을 어떻게 억제 하는가?
을 ";" 액션 블록 바깥에 있기 때문에 조건이됩니다. 따라서이 레코드는 true로 평가되고 현재 레코드를 인쇄하는 기본 동작을 호출합니다. OFS에 대한 Ditto = ";". 이 문제를 해결하는 방법에 대한 @ Jaypal의 답변을 참조하십시오. 둘 다 동일한 값을 원할 때 간결성을 위해'FS = OFS = ";"'를 사용하는 것도 좋은 생각입니다. –