如何将文件中的文本重新格式化为另一个方向?

如何将文件中的文本重新格式化为另一个方向?

我有当前格式的表格:

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看起来是假的,但它强制awk根据OFS(和ORS,但我们不会更改默认值,即换行符)重新格式化当前输入记录,在这种情况下,这意味着在所有:- 分隔字段之间插入换行符。


使用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

该脚本从标准输入到标准输出。

相关内容