각 줄의 시작 부분에 4개 미만의 기호로 누락된 0을 추가하세요.

각 줄의 시작 부분에 4개 미만의 기호로 누락된 0을 추가하세요.

이 문제를 해결하는 방법을 묻고 싶습니다. 단어가 4자 미만인 모든 줄 앞에 0을 추가해야 합니다.

입력 파일 예:

30
1
508
A0EA
A0EB
A0EC
A0ED

원하는 출력은 다음과 같아야 합니다.

0030
0001
0508
A0EA
A0EB
A0EC
A0ED

귀하의 지원에 진심으로 감사드립니다.

답변1

모든 줄에 4개의 앞에 0을 추가한 다음 각 줄의 마지막 4개 문자를 가져올 수 있습니다.

sed 's/^/0000/; s/^.*\(.\{4\}\)/\1/' < file

또는 처음부터 4자리보다 넓은 숫자를 자르지 마세요.

sed 's/^/0000/; s/^.\{1,4\}\(.\{4\}\)/\1/' < file

답변2

혼합도 있습니다:

$ numfmt --format='%04.0f' --invalid=ignore < file
0030
0001
0508
A0EA
A0EB
A0EC
A0ED

numfmtGNU Coreutils 패키지에서 제공됩니다.

답변3

입력이 16진수인 경우 strtonum()에 GNU awk를 사용하세요.

$ awk '{printf "%04X\n", strtonum("0x"$0)}' file
0030
0001
0508
A0EA
A0EB
A0EC
A0ED

입력이 16진수인지 아닌지에 관계없이 GNU awk를 사용하십시오.

$ awk '{print gensub(/ /,0,"g",sprintf("%4s",$0))}' file
0030
0001
0508
A0EA
A0EB
A0EC
A0ED

awk의 경우 입력이 16진수인지 여부에 관계없이 다음을 수행하세요.

$ awk '{v=sprintf("%4s",$0); gsub(/ /,0,v); print v}' file
0030
0001
0508
A0EA
A0EB
A0EC

심지어:

$ awk '{$0=sprintf("%4s",$0); gsub(/ /,0)} 1' file
0030
0001
0508
A0EA
A0EB
A0EC
A0ED

답변4

zsh쉘 의 경우 l:length::string:왼쪽 패딩 인수를 사용하여 플래그를 확장할 수 있습니다.

$ var=FF
$ echo ${(l:4::0:)var}
00FF

파일의 모든 단어에 적용하려면 다음을 수행하십시오.

printf '%s\n' ${(l:4::0:)$(<file)}

이 연산자도 참고하세요.자르기4자를 초과하는 단어입니다.

관련 정보