컬럼 서수 위치와 필드 길이를 사용하여 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