awk를 사용하여 두 번째 파일을 기반으로 파일 편집

awk를 사용하여 두 번째 파일을 기반으로 파일 편집

안녕하세요, 일련의 숫자가 포함된 파일이 있는데 두 번째 파일의 첫 번째 열에 해당 숫자가 나타날 때마다 행을 편집하고 싶습니다.

a.inp

; atom  type      fx      fy      fz
     1     1  1000  1000  1000
     5     1  1000  1000  1000
     7     1  1000  1000  1000
    11     1  1000  1000  1000
    12     1  1000  1000  1000
    13     1  1000  1000  1000
    15     1  1000  1000  1000
    17     1  1000  1000  1000
    20     1  1000  1000  1000
...

b.inp

    5
   15
   29
   48
   72
   87
...

산출

; atom  type      fx      fy      fz
     1     1  1000  1000  1000
     5     1  100000  100000  100000
     7     1  1000  1000  1000
    11     1  1000  1000  1000
    12     1  1000  1000  1000
    13     1  1000  1000  1000
    15     1  100000  100000  100000
    17     1  1000  1000  1000
    20     1  1000  1000  1000
...

내 코드가 어떤 이유로 작동하지 않습니까?

awk 'NR == FNR { lines[$1]; next } 
$1 in lines { for (col = 3; col <= NF; ++col) $col *= 100 } 1' b.inp a.inp > new.inp

답변1

b.inpDOS 텍스트 파일로 변환해야만 여러분이 보는 것을 재현할 수 있습니다.

Windows 텍스트 편집기를 사용하여 이러한 파일을 편집했거나 Windows 시스템에서 생성한 경우 DOS 텍스트 파일일 가능성이 높습니다.

이 유틸리티를 사용하여 Unix 텍스트 파일로 변환합니다 dos2unix.

DOS 텍스트 파일인 경우 b.inp코드에는 첫 번째 블록 값 줄 끝에 캐리지 리턴 문자가 포함됩니다 awk. 이러한 캐리지 리턴은 나중에 (where from )이 결코 참이 되지 않게 $1만듭니다 .$1 in lines$1a.inp

파일을 Unix 텍스트 파일로 변환하면 코드가 생성됩니다.

; atom  type      fx      fy      fz
     1     1  1000  1000  1000
5 1 100000 100000 100000
     7     1  1000  1000  1000
    11     1  1000  1000  1000
    12     1  1000  1000  1000
    13     1  1000  1000  1000
15 1 100000 100000 100000
    17     1  1000  1000  1000
    20     1  1000  1000  1000

관련 정보