나는 큰 텍스트 파일을 가지고 있고 명령줄에서 각 줄의 처음 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