ファイルのテキスト形式を別の方向に変更するには?

ファイルのテキスト形式を別の方向に変更するには?

現在の形式のテーブルがあります。

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偽に見えますが、現在の入力レコードは(andawkに従って再フォーマットされますが、デフォルトの改行は変更されません)、これはすべての区切りフィールド間に改行文字を挿入することを意味します。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

スクリプトは標準入力から標準出力に読み込まれます。

関連情報