我有当前格式的表格:
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 转换为空格,然后在循环中:
打印单词:echo
for
for i in $(sed 's/:/ /g')
do
echo $i
done
该脚本从标准输入到标准输出。