2014-11-11 5 views
2

전체 사용자 입력을 bash 변수 (변수 추가)에 저장하려고합니다.Bash - stdir 파일로 단어

fff 
sdsd 
sssasdasds 

예상 출력은 다음과 같습니다 :

asdasds 
fff 
sdsd 
sss 

코드는 다음과 같습니다

sdsd fff sss 
asdasds 

그것은이 출력을 생성합니다 : 다음 하는 것은 문제가 입력 철에 대한 것입니다 그들에게 등을 정렬하려면

content='' 
while read line 
do 
    content+=$(echo "$line") 
done 
result=`echo "$content" | sed -r 's/[^a-zA-Z ]+/ /g' | tr '[:upper:]' '[:lower:]' | tr ' ' '\n' | sort -u | sed '/^$/d' | sed 's/[^[:alpha:]]/\n/g'` 
echo "$result" >> "$dictionary" 

답변

2

추가 할 때 공백을 제공하지 않습니다.

content+=$(echo "$line") 

이전 값의 끝과 새 값 사이에는 공백이 있어야합니다.

content+=" $line" 

(@gniourf_gniourf 올바르게 지적하거나 이에 대한 echo에 대한 필요가 없습니다.)

+2

서브 쉘 - 'echo' 콤보는 외모로 보입니다 ... 재미 있지만 확실히 쓸모가 없습니다. –

+0

@gniourf_gniourf 매우 사실입니다. 산만하게하는 것과 함께 OP의 세부 사항을 그대로 남겨 두려는 일반적인 경향에 이르기까지 분필 할 것입니다. –

2

당신이 당신의 예에 표시하는지 달성 할 뭔가 :

words_ary=() 
while read -r -a line_ary; do 
    ((${#line_ary[@]})) || continue # skip empty lines 
    words_ary+=("${line_ary[@],,}") # The ,, is to convert to lower-case 
done 
printf '%s\n' "${words_ary[@]}" | sort -u >> "$dictionary" 
  • 우리는 공백의 단어로 입력을 나누어 배열로이 단어들을 넣습니다. line_ary
  • 우리는 우리가 비어 있지 않은 입력 우리는 각 단어를 추가
  • 이, 마지막으로 우리가 words_ary에서 각 단어를 정렬하고 $dictionary을 파일로 정렬 된 단어를 추가 배열 words_ary
  • 입력에서 소문자로 변환.
+1

','확장을 위해서 bash 4+가 있지만 +1. –