2016-12-28 1 views
4


파일에 저장된 스레드 목록이 있습니다. 나는 그렙으로 스레드 이름을 검색 할 수 있습니다 :이 목록의 출력을 조작해야하는 것으로grep에 의해 생성 된 목록에서 배열 만들기

$ grep "#" stack.out 
"MSC service thread 1-8" #20 prio=5 os_prio=0 tid=0x00007f473c045800 nid=0x7f8 waiting on condition [0x00007f4795216000] 
"MSC service thread 1-7" #19 prio=5 os_prio=0 tid=0x00007f4740001000 nid=0x7f7 waiting on condition [0x00007f479531b000] 
"MSC service thread 1-6" #18 prio=5 os_prio=0 tid=0x00007f4738001000 nid=0x7f4 waiting on condition [0x00007f479541c000] 
. . . 

, 내가 배열에이 라인을 저장해야 할 것입니다. 나는 내 이전 GREP에서 동일한 결과를 얻을하지 않는 배열을 통해 검색 할 경우

$ export my_array=($(grep "#" stack.out)) 

: 나는이 방법을 제안 몇 가지 예를 발견했습니다

$ printf '%s\n' "${my_array[@]}" 

"MSC 
service 
thread 
1-8" 
#20 
prio=5 
os_prio=0 
tid=0x00007f473c045800 
nid=0x7f8 
waiting 
on 
condition 
[0x00007f4795216000] 
"MSC 
service 
thread 
1-7" 
#19 
prio=5 
os_prio=0 
tid=0x00007f4740001000 
nid=0x7f7 
waiting 
on 
condition 
[0x00007f479531b000] 

그것은 그 캐리지 리턴을 보인다 내 배열 할당이 엉망이야. 문제를 해결하는 방법에 대한 도움이 필요하십니까? 감사합니다.

답변

5

배열을 채우기 위해 반 패턴입니다. 또한 export 키워드가 잘못되었을 가능성이 큽니다. 루프가

: 대신 루프 또는 mapfile 사용

my_array=() 
while IFS= read -r line; do 
    my_array+=("$line") 
done < <(grep "#" stack.out) 

또는 (Bash≥4)와 mapfile로를 :

mapfile -t my_array < <(grep "#" stack.out) 
+1

감사합니다. 두 답장은 모두 정확합니다. 귀하가 추가 방법을 제공함에 따라이 쪽을 선택했습니다. – Carla

4

문제 그렙의 출력 인 분할 있다는 on 공백이 만들어지기 전에 공백이 만들어 지므로 모든 단어가 배열의 개별 요소가됩니다.

사용 mapfile 대신 배열을 만들 수 있습니다 : 당신의 도움에 대한

mapfile -t my_array < <(grep "#" stack.out) 
+0

설명 주셔서 대단히 감사합니다. – Carla

관련 문제