파일의 텍스트 형식을 다른 방향으로 변경하는 방법은 무엇입니까?

파일의 텍스트 형식을 다른 방향으로 변경하는 방법은 무엇입니까?

현재 형식의 테이블이 있습니다.

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에 따라 다시 형식화되지만 기본값인 개행은 변경되지 않습니다.) 이는 모든 구분된 필드 사이에 개행 문자를 삽입하는 것을 의미합니다.OFSORS:


를 사용하면 분리된 필드를 반복하여 개별적으로 인쇄할 awk수도 있습니다 .:

awk -F ':' '{ for (i = 1; i <= NF; ++i) print $i }' <file

답변3

또 다른 아주 간단한 해결책은 sed를 사용하여 s를 공백으로 변환한 다음 :루프에서 단어를 인쇄하는 것입니다.echofor

for i in $(sed 's/:/ /g')
do
  echo $i
done

스크립트는 표준 입력에서 표준 출력으로 읽습니다.

관련 정보