괴상한 사람을 분류하는 데 어려움을 겪고 있습니다. 나는 현재 다음을 가지고 있습니다:
gawk -f p3a01.awk unsortedNames.txt | sort | gawk -f p3a01.awk
그러나 이로 인해 잘못된 결과가 나타납니다. 다음과 같은 작업을 수행하면 gawk가 제대로 작동하는 것 같습니다.
gawk -f p3a01.awk unsortedNames.txt | sort > test1.out
gawk -f p3a01.awk test1.out
정렬을 gawk에 직접 파이프하는 올바른 방법이 있는지 잘 모르겠습니다. 나는 이상적으로 모든 것을 한 줄로하고 싶습니다.
스니펫 unsortedNames.txt
:
Faye King
Lenny R Graph
I M Board
Grey White
p3a01.awk
(성을 먼저 기재하고 나머지 이름을 기재하십시오):
BEGIN{}
{
printf $NF " ";
$NF="";
print $0;
}
END{}
p3a02.awk
(성을 기준으로 정렬한 후 원래 순서대로 파일을 인쇄합니다):
BEGIN{}
{
for(i=2;i<=NF;i++){
printf $i " ";
}
print $1;
}
END{}
최종 결과(성별로 정렬):
I M Board
Lenny R Graph
Faye King
Grey White
답변1
최적화단일 처리암소 비슷한 일종의 영양앗해결책:
awk 'BEGIN{ PROCINFO["sorted_in"]="@ind_str_asc" }
{ a[$NF]=$0 }END{ for(i in a) print a[i] }' unsortedNames.txt
PROCINFO["sorted_in"]="@ind_str_asc"
- 배열 키/인덱스를 기준으로 비교/정렬합니다. 미리 정의된 배열을PROCINFO
미리 정의된 값 집합 중 하나로 설정할 수 있습니다. 이러한 특수 값은 여기에 설명되어 있습니다(문서).https://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Scanning
산출:
I M Board
Lenny R Graph
Faye King
Grey White
답변2
\r
귀하의 코드는 광고된 대로 작동하는 것으로 보이므로 발생하는 오류는 입력 데이터의 보이지 않는 문자(줄 끝에 있습니까?)와 관련이 있을 수 있습니다.
나는 당신이 있다는 것을 알았습니다제거하다데이터 변환 시 마지막 필드입니다 sort
. 이것은 필요하지 않습니다. 각 줄 앞에 마지막 필드를 추가하고 다음 줄에서 다시 제거하면 됩니다 sort
.
$ awk '{ print $NF, $0 }' file | sort | cut -d ' ' -f 2-
I M Board
Lenny R Graph
Faye King
Grey White
이 cut
명령은 두 번째 필드부터 공백으로 구분된 모든 필드를 출력합니다.