더 복잡하게하지 않는 당신은 성능상의 이유로 병렬로 작동하도록 wc
및 sort
명령을하지 않아도, 여기에 상대적으로있어 간단한 해결책은 :
output=$(awk '$13 ~ /type/ {print $15}' filename.txt; echo a)
printf "%s" "${output%a}" | sort -u
printf "%s" "${output%a}" | wc -l
하여 추가 a
과 그 합병증은 경우에 awk
명령이 $()
구조가 제거 할 입력의 끝 부분에 약간의 빈 줄을 인쇄 할 수 있습니다. sort
또는 wc
중 먼저 표시 할 항목을 쉽게 선택할 수 있습니다.
여기에 (비교적 최근의 리눅스, * BSD 및 Solaris 포함) (화산재, bash는, KSH, zsh을, ...)하지만
/dev/fd
이 시스템에있는 모든 POSIX 쉘에서 작동하는 방법입니다.
Walter's similar construction using the simpler method available in bash, ksh93 and zsh과 마찬가지로
wc
의 출력과
sort
의 출력이 혼합되어있을 수 있습니다.
둘, 나는 생각하지 않는다 혼합 두 명령의 출력을하고 싶지 않아 메모리 및에서 편안하게 적합하지 않는 중간 출력을 처리해야하는 경우
{
awk '$13 ~ /type/ {print $15}' filename.txt |
tee /dev/fd3 |
wc -l
} 3>&1 1>&3 | sort -u
이것은 POSIX 셸에서 쉬운 방법이지만, ksh 또는 zsh 코 프로세서로 수행 할 수 있어야합니다.
작동하지 않습니다 :/ – OverLex
@Lex : bash가'sh'로 호출되면 호환성 모드로 들어가고 프로세스 대체가 작동하지 않습니다. 명시 적으로 쉘을 'bash'라고 부르면 괜찮을 것입니다. – goldPseudo
이 작동하지만 너무 깔끔하지 않아요 : awk '$ 13 ~/type/{print $ 15}'filename.txt | 티 test.txt | sort -u; 고양이 test.txt | wc -l – OverLex