string - Bash:将带有空格的单行输出拆分为多行,每行一个单词
问题描述
我有一个命令,它输出一个随机排序的单词集。我的目标是最终得到一个排序列表。我正在尝试找到一种可以通过单个命令完成的方法。我知道如果输出在多行上,可以通过管道将其排序到sort
,例如
$ echo "foo
> bar
> baz" | sort
bar
baz
foo
那么是否有一个简单的命令可以用来将字符串拆分"foo bar baz"
为单独的行,这样我就可以实现我的目标echo "foo bar baz" | magic_string_splitter | sort
编辑:奖金,列表实际上包含一些额外的输出,这将是很好的忽略。例如,我的命令的输出实际上可能是这样的
$ print_words
foo bar baz are your words
但我仍然希望最终结果是
bar
baz
foo
我们可以完全剥离并忽略最后的“是你的话”。
解决方案
使用 GNU awk:
echo 'foo bar baz are your words' | awk '{NF-=3; OFS="\n"; $1=$1}1' | sort
NF-=3
:从当前行中删除最后 3 列。
OFS="\n"
: 将输出字段分隔符设置为换行符(或使用OFS=ORS
)。
$1=$1
:强制 awk 用新的 OFS(现在是换行符)重建当前行。
1
: awk 计算1
为真表达式并输出当前行。
输出:
酒吧 巴兹 富
推荐阅读
- c# - 以编程方式禁用任务管理器 (ctrl+alt+del)
- python - 如何(手动)编辑元素树的xml格式
- arrays - 在 ruby 中使用 spaceship 运算符进行自定义排序
- scala - 为什么不能将元素附加到列表中
- unit-testing - JUnit 避免重复断言
- json - 用jq替换基于键值对的JSON值
- python - 使用python从csv数据生成一个新的xml
- python - 在 Python Pandas 数据集中每行保持随机最小值
- ionic-framework - Ionic 4 选项卡:在推送新页面之前删除当前页面
- python - 在发送带有相关 pdf 附件的多封电子邮件时显示空白 pdf 附件