고정 너비 Unix 파일을 열 번호 위치와 필드 길이로 구분된 파이프로 변환하는 방법

고정 너비 Unix 파일을 열 번호 위치와 필드 길이로 구분된 파이프로 변환하는 방법

UNIX에서 열 번호 위치와 필드 길이를 사용하여 고정 너비 파일을 파이프로 구분된 파일로 변환하고 싶습니다.

입력은 다음과 같습니다.

00100000003779U20210203
00200000004238U20210203

원하는 출력:

001|0000000377|9U|20210203
002|0000000423|8U|20210203

이용 가능한 정보는

Column Ordinal Position - field length 
1 - 3
2 - 10
3 - 2
4 - 8

답변1

이는 도움이 될 수 있습니다:

cut -b1-3,4-13,14-15,16-23 --output-delim="|" file

답변2

GNU awk 사용

gawk -v OFS='|' -v FIELDWIDTHS="3 10 2 8" '{$1=$1; print}' file
001|0000000377|9U|20210203
002|0000000423|8U|20210203

$1=$1트릭은 awk가 출력 필드 구분 기호를 사용하여 레코드를 다시 쓰도록 합니다.


좀 더 이식성이 뛰어난 것이 필요하다면 Perl은 어디에나 있습니다:

perl -lne 'print join "|", (/^(.{3})(.{10})(.{2})(.{8})/)' file

관련 정보