일부 데이터의 형식을 조정해야 하는데 이를 쉽게 변경할 수 있는 방법이 있는지 잘 모르겠습니다. 두 데이터 요소 사이에 "/"를 사용하여 두 데이터 열을 하나의 열로 병합해야 합니다.
입력하다
Known Mother
5 babies
3 Loci
Mom 314 322 249 261 342 346
2_1_2011 314 314 249 257 342 346
2_17_2011 314 314 257 261 346 346
2_26_2011 314 314 257 261 342 346
2_30_2011 314 314 257 261 342 342
2_5_2011 314 314 249 257 342 342
원하는 출력
Known Mother
5 babies
3 Loci
Mom 314/322 249/261 342/346
2_1_2011 314/314 249/257 342/346
2_17_2011 314/314 257/261 346/346
2_26_2011 314/314 257/261 342/346
2_30_2011 314/314 257/261 342/342
2_5_2011 314/314 249/257 342/342
이러한 파일에는 위의 예에 표시된 것보다 더 많은 데이터(총 144개 파일)가 포함되어 있습니다. 수동으로 Excel을 편집하지 않고 위의 수정 작업을 수행하는 방법에 대한 제안 사항이 있으면 크게 감사하겠습니다.
답변1
이 질문에는 두 부분이 있습니다.
- 설명하는 방식으로 변환해야 하는 행을 결정합니다(예: "7개 열이 있는 행").
- 변환 수행
Awk를 사용하여 이를 수행하는 한 가지 방법은 다음과 같습니다.
awk 'NF == 7 { print $1, $2 "/" $3, $4 "/" $5, $6 "/" $7 }
NF != 7 { print }' input.txt
산출:
Known Mother
5 babies
3 Loci
Mom 314/322 249/261 342/346
2_1_2011 314/314 249/257 342/346
2_17_2011 314/314 257/261 346/346
2_26_2011 314/314 257/261 342/346
2_30_2011 314/314 257/261 342/342
2_5_2011 314/314 249/257 342/342
답변2
맞잡다Awk
해결책:
awk 'NR<4;
NR>3{
printf "%s\t",$1;
for (i=2; i<NF; i+=2) printf "%s/%s%s", $i, $(i+1), (NF-i==1? "":"\t");
print ""
}' file
산출:
Known Mother
5 babies
3 Loci
Mom 314/322 249/261 342/346
2_1_2011 314/314 249/257 342/346
2_17_2011 314/314 257/261 346/346
2_26_2011 314/314 257/261 342/346
2_30_2011 314/314 257/261 342/342
2_5_2011 314/314 249/257 342/342