내 원본 파일이 다음과 같다고 가정해 보겠습니다.
N O D E O U T P U T
THE FOLLOWING TABLE IS PRINTED FOR NODES BELONGING TO NODE SET NSET_OUTPUT
NODE FOOT- NT11
NOTE
3 20.00
11 20.00
1003 23.75
1011 23.75
2003 27.52
2011 27.52
3003 31.30
3011 31.30
4003 35.08
두 번째 파일을 생성해야 하지만 두 번째 열의 값에 100을 곱하기만 하면 됩니다. 이 파일을 어떻게 구할 수 있나요?
답변1
숫자 데이터 블록의 필드 너비와 형식을 유지한다고 가정하면 다음과 같은 것을 제안합니다.
awk '
$1 ~ /[0-9]+/ && $2 ~ /[-+0-9.]+/ {
$0 = sprintf("%6d%12.2f", $1, 100*$2)
} 1
' file
전임자.
$ awk '$1 ~ /[0-9]+/ && $2 ~ /[-+0-9.]+/ {$0 = sprintf("%6d%12.2f", $1, 100*$2)} 1' file
N O D E O U T P U T
THE FOLLOWING TABLE IS PRINTED FOR NODES BELONGING TO NODE SET NSET_OUTPUT
NODE FOOT- NT11
NOTE
3 2000.00
11 2000.00
1003 2375.00
1011 2375.00
2003 2752.00
2011 2752.00
3003 3130.00
3011 3130.00
4003 3508.00
답변2
나는 요청을 단순히 두 번째 열의 숫자에 100을 곱한 결과로 구성된 출력으로 해석하기로 결정했습니다.
이는 헤더가 정적이고 항상 6줄 길이라고 가정합니다. 무시됩니다.
$ awk 'FNR > 6 { print 100*$2 }' <infile
2000
2000
2375
2375
2752
2752
3130
3130
3508
FNR > 6
최소 6개 라인을 읽었을 때 조건은 두 번째 필드를 곱하고 출력하는 블록을 트리거합니다.
헤더의 길이를 모르는 경우 다음을 FNR > 6
사용할 수 있습니다.$2 ~ /^-?[0-9.]+$/
어린애 같은두 번째 필드가 부동 소수점인지 여부를 테스트하는 방법으로 선택적으로 서명됩니다("선택 사항 -
뒤에 숫자와 점만 표시됨").
답변3
출력이 "outfile"이라는 파일에 저장되었다고 가정하면 여기에 또 다른 해결책이 있습니다. 단, 숫자 데이터가 포함된 열의 형식은 유지되지 않는다는 점에 주의해야 합니다.
awk '{if(/^ *[0-9\.]+ *[0-9\.]+ *$/) {var=$2*100; print $1,var;} else { print $0 }}' outfile