1

내 bash는 명령이 내 코드awk는 스크립트 (bash는)에

{z=0 
for(i=2;i<17;i++) 
    if ($i=="y") 
     z++ 
print $1 " " z} 

입니다

awk -f code.txt input.txt 

입니다 이것은 내 입력

AaA y n y n y n n n y n n n n n y 
BbB n y y n n n n n n n n n n n n 

내 출력은

해야
AaA 5 
BbB 2 

는 그러나 그것은

AaA 4 
BbB 2 

코드로 장난 후에는이 행의 마지막 심볼을 등록하지 않는 것입니다.

{z=0 
for(i=2;i<18;i++) 
     print $i 
print $1 " " z} 

이 스크립트를 실행하면 모든 y/n이 출력되므로 if 문에 문제가 있어야합니다.

답변

2

입력 파일에 MS-DOS 줄 끝 (CRLF)이있는 경우 일 수 있습니다. 마지막 심볼은 y<CR>입니다. 당신이

hexdump -C input.txt 
+0

내 헥스 덤프 : 00000000 41 61 41 20 79 20 6e 20 79 20 6e 20 79 20 6e 20 | AaA y n y n y n | 00000010 6e 20 6e 20 79 20 6e 20 6e 20 6e 20 6e 20 6e 20 | n n y n n n n n | 00000020 79 0d 0a 42 62 42 20 6e 20 79 20 79 20 6e 20 6e | y ... BbB ny y n n | 00000030 20 6e 20 6e 20 6e 20 6e 20 6e 20 6e 20 6e 20 6e | n n n n n n n n | * 00000044' –

+0

질문에 16 진수 덤프를 붙여넣고 코드로 서식을 지정하면 읽기 쉽습니다. –

+1

'0d 0a'가 문제이며 '0a'만 있어야합니다. 'dos2unix input.txt'를 사용하고 awk 스크립트를 다시 시도하십시오. – Cyrus

0

실행할 수있는 리눅스 시스템에이 사실인지 여부를 확인하려면 문제는 CRLF에있을 것 같았다. awake 루프에서이를 awk 루프로 고칠 수 있습니다.

sub(/\r/,"",$NF) 

즉. 마지막 필드에서 CR (아무것도 대체하지 않음)을 제거하십시오. 또한, 당신은 y 발생을 카운트하는 sub 또는 gsub을 사용할 수

$ awk '$0=$1 OFS gsub(FS "y","&")' file 
AaA 5 
BbB 2 

우리가 자체 (&)와 y 교체로 \r 중요하지 않습니다이 방법을.