안녕하세요, 일련의 숫자가 포함된 파일이 있는데 두 번째 파일의 첫 번째 열에 해당 숫자가 나타날 때마다 행을 편집하고 싶습니다.
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.inp
DOS 텍스트 파일로 변환해야만 여러분이 보는 것을 재현할 수 있습니다.
Windows 텍스트 편집기를 사용하여 이러한 파일을 편집했거나 Windows 시스템에서 생성한 경우 DOS 텍스트 파일일 가능성이 높습니다.
이 유틸리티를 사용하여 Unix 텍스트 파일로 변환합니다 dos2unix
.
DOS 텍스트 파일인 경우 b.inp
코드에는 첫 번째 블록 값 줄 끝에 캐리지 리턴 문자가 포함됩니다 awk
. 이러한 캐리지 리턴은 나중에 (where from )이 결코 참이 되지 않게 $1
만듭니다 .$1 in lines
$1
a.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