
데이터
ID | Size | Blocks
-------|-----------|---------
206 |80760288 | 157744
207 |80760288 | 157744
328 |241520288 | 471728
AWK 원하는 출력
ID |BlockSize | Size | Blocks
-------|----------|-----------|---------
206 | 511.971 |80760288 | 157744
207 | 511.971 |80760288 | 157744
328 | 511.991 |241520288 | 471728
blockSize
크기/청크는 어디에 있나요?
AWK를 사용하여 이 변환을 어떻게 수행할 수 있나요?
답변1
한 가지 방법은 다음과 같습니다.
$ awk -F'|' -vOFS="|" '{
if(NR==1){print $1," Blocksize ",$2,$3}
else if(NR==2){print $1,"-----------",$2,$3}
else{printf "%-7s|%-11s|%-11s|%-11s\n",$1,$2/$3,$2,$3}
}' file
ID | Blocksize | Size | Blocks
-------|-----------|-----------|---------
206 |511.971 |80760288 | 157744
207 |511.971 |80760288 | 157744
328 |511.991 |241520288 | 471728
그러나 이는 열 정렬을 유지해야 하기 때문에 불필요하게 복잡해집니다. 실제로는 필요하지 않다고 생각되므로 그냥 사용하고 싶을 수도 있습니다.
$ sed 's/[-|]/ /g;/^ *$/d' file |
awk '{if(NR==1){print $1,"Blocksize",$2,$3}else{print $1,$2/$3,$2,$3}}'
ID Blocksize Size Blocks
206 511.971 80760288 157744
207 511.971 80760288 157744
328 511.991 241520288 471728
이는 사용자 친화적이지는 않지만 공백으로 구분된 데이터가 필요한 모든 프로그램에 대한 완벽한 입력입니다.