특정 행의 특정 열에 있는 다른 숫자를 곱하는 방법은 무엇입니까?

특정 행의 특정 열에 있는 다른 숫자를 곱하는 방법은 무엇입니까?

두 번째 열(5행), (6~8행), (9~10행)에 각각 5, 4, 3을 곱하고 싶습니다.

다음 명령을 사용해서만 숫자를 곱할 수 있습니다

awk '{print $1, $2*5, $3,$4}' defect > out.txt

입력하다:

# "Frame" "Timestep" "WignerSeitz.interstitial_count" "WignerSeitz.vacancy_count"
 1 100 1 1 
 2 200 1 1 
 3 300 1 1 
 4 400 1 1 
 5 500 1 1 
 6 600 1 1 
 7 700 2 2 
 8 800 2 2 
 9 900 2 2 
 10 1000 2 2

예상 출력:

# "Frame" "Timestep" "WignerSeitz.interstitial_count" "WignerSeitz.vacancy_count"
 1 500 1 1 
 2 1000 1 1 
 3 1500 1 1 
 4 2000 1 1 
 5 2500 1 1 
 6 2400 1 1 
 7 2800 2 2 
 8 3200 2 2 
 9 2700 2 2 
 10 3000 2 2

답변1

awk에서 NR= 줄 번호 변수를 사용해야 합니다.

awk 'NR<=5{$2=$2*5};NR>5 && NR<=8{$2=$2*4};NR>8 && NR<=10{$2=$2*3};1' file1
1 500 1 1
2 1000 1 1
3 1500 1 1
4 2000 1 1
5 2500 1 1
6 2400 1 1
7 2800 2 2
8 3200 2 2
9 2700 2 2
10 3000 2 2

답변2

if...else명령문을 사용하여 NR행 번호를 얻을 수 있습니다.

awk '{if (NR==1) {print $1, $2*5, $3, $4, $5} else if (NR <= 6) {print $1, $2*5, $3, $4, $5} else if (NR<=9) {print $1, $2*4, $3, $4, $5} else {print $1, $2*3, $3, $4, $5}}' defect > out.txt

등.

답변3

첫 번째 필드가 승수에 대한 제어인 경우(행 번호가 헤더 행의 영향을 받기 때문에) $1과 일치할 수 있습니다.

awk '$1 ~ /1$|2|3|4|5/ {$2*=5}; $1 ~ /6|7|8/ {$2*=4}; $1 ~ /9|10/ {$2*=3};1' defect 
# "Frame" "Timestep" "WignerSeitz.interstitial_count" "WignerSeitz.vacancy_count"
1 500 1 1
2 1000 1 1
3 1500 1 1
4 2000 1 1
5 2500 1 1
6 2400 1 1
7 2800 2 2
8 3200 2 2
9 2700 2 2
10 3000 2 2

답변4

awk-if-else if-else 조건을 사용하여 완료

awk '{if (NR<6){print $1,5*$2,$3,$4}else if(NR>5 && NR<9){print $1,4*$2,$3,$4}else {print $1,3*$2,$3,$4}}' p

산출

1 500 1 1
2 1000 1 1
3 1500 1 1
4 2000 1 1
5 2500 1 1
6 2400 1 1
7 2800 2 2
8 3200 2 2
9 2700 2 2
10 3000 2 2

관련 정보