9개의 열이 있는 csv 파일이 있는데, 세 개의 열마다 서로 다른 행이 있습니다. 파일은 다음과 같습니다
1 6.2 0.5 1 0.08 0.5 1 0.001 0.1
2 5.2 0.6 2 0.01 1.3 2 0.008 0.8
3 4.3 0.7 3 0.002 0.32
4 2.0 0.7 4 0.2 0.35
5 13.1 1.3 5 0.54 4.32
6 1.02 1.67
Bash 스크립트를 사용하여 빈 필드를 0으로 바꾸고 싶습니다. 내가 만들고 싶은 결과는 다음과 같아야합니다
1 6.2 0.5 1 0.08 0.5 1 0.001 0.1
2 5.2 0.6 2 0.01 1.3 2 0.008 0.8
3 4.3 0.7 3 0.002 0.32 3 0 0
4 2.0 0.7 4 0.2 0.35 4 0 0
5 13.1 1.3 5 0.54 4.32 5 0 0
6 1.02 1.67 6 0 0 6 0 0
답변1
해결책은 열 수를 하드코딩하고 이후 열만 비어 있을 수 있다고 가정하는 것입니다.
awk 'BEGIN { OFS=FS="\t" } {
$1=NR; if(!$2)$2=0; if(!$3)$3=0;
$4=NR; if(!$5)$5=0; if(!$6)$6=0;
$7=NR; if(!$8)$8=0; if(!$9)$9=0;
print }' /path/to/your.csv
답변2
이 시도:
awk -v cols=9 '{
printf "%s", $0
for (n = NF; n < cols; n++) printf "\t%d", (n % 3 == 0 ? NR : 0)
print ""
}' file
열 수는 변수로 전달되므로 cols
쉽게 변경할 수 있습니다. 나는 출력 데이터를 정렬하는 데 신경 쓰지 않았습니다.