우분투 리눅스에서 bash 언어로 스크립트를 프로그래밍해야합니다. 명령 줄에서 세 가지 인수를 가져야합니다. 먼저 정렬해야하는 파일의 이름, 두 번째 문자 (알파벳순으로 정렬하려면 'a') 오름차순 또는 알파벳 내림차순으로 정렬하려면 'z'), 세 번째는 양수 'n'입니다. 'n'의 배수 인 줄만 정렬해야합니다. 예를 들어, 100 줄이고 n = 5 인 텍스트 파일이있는 경우 5,10,15, ..., 100 줄만 정렬해야하고 나머지는 그대로 유지해야합니다. 할 수 있습니까? 다음과 같이 'n'의 배수 인 줄을 찾아 정렬 할 수 있습니다.
awk "NR%$n==0" archivo.txt | sort -f
하지만 지금은이 줄을 파일에 다시 쓰는 방법을 모르겠습니다.
관심을 가져 주셔서 감사합니다
전체 입력 파일을 메모리에 던져 넣어 줄 부분을 인쇄하기 전에 정렬 할 수 있다면 gawk를 사용할 수 있습니다.
#!/usr/bin/env gawk -f
BEGIN {
if (!inc) inc=5 # set a default
}
NR%inc {
# This is a normal line
nosort[NR]=$0
next
}
{
# This is an increment of "inc"
tosort[NR]=$0
}
END {
# Sort the array of increments
asort(tosort)
# Step through our two arrays, picking what to print based on the modulo
n=0
for (i=1; i<NR; i++)
if (i%inc==0)
print tosort[++n]
else
print nosort[i]
}
다음과 같이 실행할 수 있습니다.
$ ./sortthing -v inc=5 inputfile
이것은 asort()
One True Awk에 존재하지 않는 gawk 함수를 사용합니다 . 따라서 * BSD 또는 OS X에서이 작업을 수행하는 경우 추가 도구를 설치해야 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다