简单而快速的问题。
我有这个
awk -f file # awk use file as input
awk '/word/' file # awk show me word
awk '/32$/' text # all words with 32..
我要这个
# awk use file as input
awk -f file
# awk show me word
awk '/word/' file
# all words with 32..
awk '/32$/' text
可以使用 awk 来做到这一点吗?也欢迎使用其他命令(perl、sed、python..)
答案1
$ awk -F '[[:space:]]+#' '{print "#" $2 ORS $1 ORS}' file
# awk use file as input
awk -f file
# awk show me word
awk '/word/' file
# all words with 32..
awk '/32$/' text
#
不过,只有当每行输入上只有 1 前面有空格时才有效,就像您提供的示例输入/输出中一样。如果您的真实数据不是这种情况,则编辑您的问题以提供更真正具有代表性的示例输入/输出,包括例如#
awk 代码和/或注释中 s 前面带有空格的情况,例如:
awk '/foo # bar/' file # lines with # before bar
#
并告诉我们处理此类情况(尤其是注释中的 s)的算法。
答案2
和perl
:
perl -i -lpe 's/(.*\S)\s+(#.*)/\2\n\1\n\n/' your-file
#
这会移动非空白字符后紧随其后的至少一个空白字符的最右侧出现位置之后的部分。
使用-i
,文件被编辑i
n 次。