당신이 당신의 질문에 의견을 말할 때, awk
정말 갈 길입니다. kev의 답변에서 볼 수 있듯이 공간을 짜는 것과 cut
함께 사용할 수 있습니다 .tr -s
그러나 앞으로 독자들을 위해 가능한 모든 조합을 살펴 보겠습니다. 설명은 테스트 섹션에 있습니다.
tr | 절단
tr -s ' ' < file | cut -d' ' -f4
어 wk
awk '{print $4}' file
세게 때리다
while read -r _ _ _ myfield _
do
echo "forth field: $myfield"
done < file
sed
sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' file
테스트
이 파일이 주어지면 명령을 테스트 해 봅시다.
$ cat a
this is line 1 more text
this is line 2 more text
this is line 3 more text
this is line 4 more text
tr | 절단
$ cut -d' ' -f4 a
is
# it does not show what we want!
$ tr -s ' ' < a | cut -d' ' -f4
1
2 # this makes it!
3
4
$
어 wk
$ awk '{print $4}' a
1
2
3
4
세게 때리다
필드를 순차적으로 읽습니다. _
우리는 이것을 사용하여 이러한 필드를 무시하기위한 "정크 변수"로서의 이탈 변수임을 나타냅니다. 이런 식으로, 우리 $myfield
는 파일 사이의 공간에 관계없이 파일의 4 번째 필드로 저장 합니다.
$ while read -r _ _ _ a _; do echo "4th field: $a"; done < a
4th field: 1
4th field: 2
4th field: 3
4th field: 4
sed
공백이없는 세 그룹의 공백을 잡습니다 ([^ ]*[ ]*){3}
. 그런 다음, 네 번째 필드로서 공백이 될 때까지 오는 모든 것을 포착하여 최종적으로로 인쇄됩니다 \1
.
$ sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' a
1
2
3
4