배수의 첫 번째 문자만 인쇄

배수의 첫 번째 문자만 인쇄

나는 큰 텍스트 파일을 가지고 있고 명령줄에서 각 줄의 처음 4, 처음 5, 처음 8자를 인쇄하고 싶습니다.

예를 들어 다음 줄이 있습니다.

123456789ab
ABCdefgih55

따라서 출력은 다음과 같아야 합니다.

1234
ABCd
12345
ABCde
12345678
ABCdefgh

답변1

for len in 4 5 8; do
    cut -c "1-$len" file
done

이는 cut -c이름이 지정된 파일의 각 줄의 첫 번째 부분을 잘라내는 데 반복적으로 사용 됩니다 file. 컷 비트의 길이는 루프 변수에 따라 다릅니다 len.

"한 줄" 기준을 엄격하게 준수하는 경우:

for len in 4 5 8; do cut -c "1-$len" file; done

또는 사용하기 쉬운 쉘 기능으로:

cut_to_lengths () {
    file=$1; shift
    for len do
        cut -c "1-$len" "$file"
    done
}

그걸 써:

$ cut_to_lengths file 4 5 8 1
1234
ABCd
12345
ABCde
12345678
ABCdefgi
1
A

존재하다논평라인이 다음과 같은 경우 출력하지 않도록 지정합니다.더 짧게절단 길이.

이를 위해 cut명령을 다음과 같이 변경할 수 있습니다 awk.

awk -v len="$len" 'length >= len { print substr($0, 1, len) }'

위의 코드를 cut -c "1-$len"위의 명령으로 바꿉니다.awk

답변2

귀하의 예제 형식이 올바르게 지정되지 않았습니다. 공백이 새로운 줄이어야 한다고 생각하나요? 그렇다면 가장 쉬운 방법은 다음을 사용하는 것입니다.cut

$ cut -c -4 input각 줄의 처음 4자가 인쇄됩니다. 원하는만큼 많은 문자로 이것을 반복하십시오.

답변3

다음을 시도해 보세요

for line in `cat input`; do echo ${line} | cut -c 1-4 && echo ${line} | cut -c 1-5 && echo ${line} | cut -c 1-8; done

이것은

1234
12345
12345678
ABCd
ABCde
ABCdefgi

관련 정보