2014-07-05 8 views
-2

"CLIENT TOTAL"및 그 다음의 단위 행을 기준으로 한 행을 다음 이름까지 삭제하려고합니다.
"CLIENT TOTAL"행 다음에 오는 단위 선 (예 : 30.0과 15.0이있는 행)의 수는 다음 이름까지 달라질 수 있습니다. 가장 중요한 것은 파일이 구분되지 않았기 때문입니다. 내 입력 파일은 다음과 같습니다. INPUT :유닉스에서 particluar 필드를 기반으로 행 삭제 및 채우기 방법

상대성/32,629 DT MBSA OF
HALL 15.0 5,850 HALL 30.0 21,650 상대성/34145 DT MBSA OF
HALL 30.0 10,850 * CLIENT TOTAL 상대성/OF 38,350 30.0 32,500 15.0 5,850 PFIZER 96,607 DT MBSA
HALL 15.0 32,700 30.0 21,300 HALL PFIZER 96,609 DT MBSA
HALL 60.0 30,200 HALL 75.0 182,100 HALL 90.0 67,700 * 클라이언트 TOTAL 화이자는 334,000 15.0 32,700

90.0 67,700 30.0 21,300 나는 다음과 같이 내 출력을 할 수 있습니다.
OUTPUT :

상대성/32,629 DT MBSA OF
HALL 15.0 5,850 HALL 30.0 21,650 상대성/34145 DT MBSA OF
HALL 30.0 10,850 PFIZER 96,607 DT MBSA
HALL 15.0 32,700 HALL 30.0 21,300 화이자 96609 DT MBSA
홀 60.0 30,200 홀 75.0 182,100 홀 90.0 67,700

AWK210 내지
+0

중간 출력/입력 파일을 원하십니까? 아니면 위의 첫 번째 입력 파일을 마지막 출력 파일로 변환 하시겠습니까? –

+0

맨 처음 입력에 마지막 OUTPUT을 원합니다. –

+0

그런 다음 질문을 정리하여 읽는 사람들이 시간을 낭비하지 않도록하십시오. –

답변

1

$ awk '$1=="-----"{x=0} NF==1{x=1}x' file 
34567 
20.0 5,678 
20.0 5,678 
20.0 5,678 
20.0 5,678 
20.0 5,678 
78545 
20.0 41,424 
20.0 41,424 
30.0 41,424 

는 전체 라인 $0$1 1에 해당하는 줄 열 개까지 1 ----- 포함 된 선을 생략합니다.

업데이트 :

$ awk 'NF==1{print; var=$1}NF==2{print var" "$2}' file 
34567 
34567 5,678 
34567 5,678 
34567 5,678 
34567 5,678 
34567 5,678 
78545 
78545 41,424 
78545 41,424 
78545 41,424 
+0

'$ 0 == $ 1'은 단 하나의 필드가 있는지 테스트하는 이상한 방법입니다. 'NF == 1'은 더 자연 스럽습니다. '$ 1'에 '3'이 들어 있고 '$ 2'에 '0'이 들어 있다면? Awk는 아마 숫자 비교를 할 것이고'$ 0 == $ 1'은 2 개의 필드가 있음에도 불구하고 사실 일 것입니다. –

+1

Thanks @Ed가 업데이트되었습니다. –

+0

감사합니다 @Avinash Raj .... 정말로 당신은 최고입니다 .... 다시 한 번 많이 감사합니다 :) –

0
$ cat tst.awk 
BEGIN{ FS=OFS="\t" } 
/^[[:digit:]]+[[:space:]]*$/ { id = $1; inRec = 1 } 
/^-/ { inRec = 0 } 
inRec { print id, $2 } 

.

$ awk -f tst.awk file 
25333 
98275 
98275 68,000 
98275 149,000 
98275 41,000 
98275 
98275 22,000 
98275 162,000 
25333 
31932 
31932 334,000 
31932 
31932 53,000 
31932 47,000 
+0

'$'는 프롬프트입니다. 'tst.awk'는'BEGIN'으로 시작하고'$ 2'로 끝나는 awk 스크립트를 포함하고있는 파일입니다. 'cat tst.awk'는'tst.awk' 파일의 내용을보기 위해 실행하는 명령입니다. 쉘 프로그래밍의 기초를 배우기 위해 Chris Johnson이 쓴 "Shell Scripting Recipes"책을 읽어보십시오. –

+0

글쎄 ... 유닉스에 새로운 책을 제안 주셔서 고마워 ... 또한 코드가 잘못된 출력을 반환하고 위의 출력을 얻지 못하고있어 ... 그 field1 값과 field2 반환 null입니다 ... –

+0

이 스크립트는 필드 1 값을 인쇄 할 수 없습니다. 당신의 입력 파일이 당신이 기술 한 것과 같지 않습니다 ('cat -v'는 그 안에 제어 문자를 보여 줍니까), 아니면 스크립트를 복사/붙여 넣기 할 때 뭔가 잘못됐거나 awk가 깨졌습니다 (어떤 OS를 사용하고 있습니까?). awk --version 출력은 무엇인가?), 또는 그것을 잘못 호출하고있다. 그 외에도 명백한 일을하고 디버깅 인쇄 문을 스크립트에 추가하여 무엇이 잘못되었는지 파악하십시오. 위에서 볼 수 있듯이, 입력 파일의 형식을 지정하고 함수 awk를 가지고 있다면 스크립트는 원하는 출력을 생성합니다. –