현재 형식의 테이블이 있습니다.
Lead:Arrow1:Arrow2:Arrow3
Follow:Arrow4:Arrow5:Arrow6:Arrow7:Arrow8:Arrow9
이걸로 옮기고 싶어
Lead
Arrow1
Arrow2
Arrow3
Follow
Arrow4
Arrow5
Arrow6
Arrow7
Arrow8
Arrow9
나는 시도했다 awk
:
$(awk -F":" '/Lead/ {print NF-1}' $f)
$(awk -F":" '/Follow/ {print NF-1}' $f)
그러나 성공하지 못했습니다. 이 방법 awk
이나 다른 방법은 어떻게 할 수 있나요 ?
답변1
tr
다음과 같이 사용할 수 있습니다 .
<file tr ":" "\n"
Lead
Arrow1
Arrow2
Arrow3
Follow
Arrow4
Arrow5
Arrow6
Arrow7
Arrow8
Arrow9
또는 awk
다음과 같습니다:
<file awk '{gsub(/:/,"\n")}1'
Lead
Arrow1
Arrow2
Arrow3
Follow
Arrow4
Arrow5
Arrow6
Arrow7
Arrow8
Arrow9
답변2
제안한대로 사용하십시오 awk
.
$ awk '{ gsub(":", "\n", $0); print }' <file
Lead
Arrow1
Arrow2
Arrow3
Follow
Arrow4
Arrow5
Arrow6
Arrow7
Arrow8
Arrow9
이는 :
입력 데이터의 모든 내용을 개행 문자로 대체합니다.
awk
(출력 필드 구분 기호) 변수를 사용하는 또 다른 OFS
솔루션 :
awk -v OFS='\n' -F ':' '{ $1=$1; print }' <file
할당은 $1=$1
가짜로 보이지만 현재 입력 레코드가 (and awk
에 따라 다시 형식화되지만 기본값인 개행은 변경되지 않습니다.) 이는 모든 구분된 필드 사이에 개행 문자를 삽입하는 것을 의미합니다.OFS
ORS
:
를 사용하면 분리된 필드를 반복하여 개별적으로 인쇄할 awk
수도 있습니다 .:
awk -F ':' '{ for (i = 1; i <= NF; ++i) print $i }' <file
답변3
또 다른 아주 간단한 해결책은 sed를 사용하여 s를 공백으로 변환한 다음 :
루프에서 단어를 인쇄하는 것입니다.echo
for
for i in $(sed 's/:/ /g')
do
echo $i
done
스크립트는 표준 입력에서 표준 출력으로 읽습니다.