awk 2개 파일에서 파이프라인 계산 붙여넣기 -d

awk 2개 파일에서 파이프라인 계산 붙여넣기 -d

파일 내용: File1

1 a
2 b
3 c
...

-----파일 2

2 a
2 c
2 d
...

awk는 쉼표로 구분된 다음 형식을 허용합니다.

1 a,2 a
2 b,2 c
...

paste -d, File1 File2 | awk -F, '{n=NF/2;s=""; for (i=1;i<=n;i++){printf "%s%s", s, ($i-$(i+n));s=",";}; print ""}'

나는 이 줄을 사용하여 첫 번째 필드에 대해 한 줄씩 차이를 냅니다. 첫 번째 줄은 1-2이므로 -1을 인쇄합니다.

좋아요, 괜찮아요. 정답을 얻었지만 필드가 -F로 구분될 때 숫자 필드를 어떻게 선택하는지 아직도 이해가 안 돼요.

1 a

내가 변하면

1 a 

도착하다

a 1

나머지 부분과 동일한 작업을 수행하면 작동하지 않습니다. 논리적으로 동의합니다. 즉, 필드가 숫자와 문자인 경우 어떻게 숫자를 얻습니까? $i = 숫자, 문자는 왜 안 되나요?

답변1

필드가 숫자와 문자인 경우 어떻게 숫자를 얻나요?

,필드 구분 기호( ) 인 경우 -F,유사한 텍스트 2 a는 단일 필드이며, 숫자로 사용되는 경우 단순히 숫자 2로 처리됩니다.

AWK 언어는 문자열을 숫자로 처리하도록 요청할 때 매우 관대합니다. 더 이상 숫자로 이해되지 않을 때까지 문자열을 읽습니다. 그 시점에서 무엇이든 의미가 있다면 그것은 당신의 전화번호입니다. 그렇지 않으면 0으로 처리합니다. 산술 표현식에 문자열을 사용하면 이 모든 일이 자동으로 발생합니다. 작동 방식을 보려면 다음을 실행하세요.

awk '{print $0 + 0}'

$0전체 라인입니다. 0을 추가하면 숫자로 해석되지만 숫자가 무엇인지는 변경되지 않습니다. 그런 다음 입력 줄을 입력하여 awk숫자로 처리되는 방식을 확인할 수 있습니다 . 예를 들어, 빈 문자열은 0, 3a3, 1 21, 3.4.5.63.4 등임을 알 수 있습니다. ( Ctrl줄 시작 부분에서 +를 누르면 입력이 종료되고 빠져 나오거나 +를 직접 누르면 됩니다.)DawkCtrlC


실제로 수행하려는 작업에 따라 해당 명령이 수행하는 작업과 작동 방식을 보다 명확하게 설명하고 보다 쉽게 ​​수정할 수 있는 간단한 명령을 작성할 수 있습니다.예를 들어, 각 파일에 공백으로 구분된 두 개의 열만 있고 항목 자체에 공백이 포함되어 있지 않은 경우, paste없이 실행하여 -d(또는 원하는 경우 유사한 사용 ) 테이블을 4열 테이블로 병합하고 다음 없이 -d ' '테이블을 파이프하세요 .awk-F

paste File1 File2 | awk '{print $1 - $3}'

그러면 숫자가 문자 앞이 아닌 뒤에 나타날 때 AWK 스크립트를 조정하는 방법이 분명해집니다.

paste File3 File4 | awk '{print $2 - $4}'

File3(이를 테스트하려면 토글 열을 사용하여 각각 make 및 File4from 을 사용할 수 있습니다 File1. 예를 들어 make .)File2awkawk '{print $2, $1}' File1 > File3File3

관련 정보