Linux 如何根据模式将文件拆分为两个文件?
在Linux 如何根据模式将文件拆分为两个文件?,linux,bash,split,Linux,Bash,Split,在Linux中的一个文件中,我有以下内容 123_test 234_test abc_rest cde_rest and so on 现在我想在Linux中获取两个文件。只包含如下记录的一种 123_test 234_test abc_rest cde_rest 第二个文件如下 123_test 234_test abc_rest cde_rest 我想根据之后的内容来分割文件,比如\u test或\u rest 编辑: 在Linux中如何实现这一点 我们可以使用拆分功能吗?您可以使用
Linux
中的一个文件中,我有以下内容
123_test
234_test
abc_rest
cde_rest
and so on
现在我想在Linux
中获取两个文件。只包含如下记录的一种
123_test
234_test
abc_rest
cde_rest
第二个文件如下
123_test
234_test
abc_rest
cde_rest
我想根据
之后的内容来分割文件,比如\u test
或\u rest
编辑:
在Linux中如何实现这一点
我们可以使用拆分功能吗?您可以使用此
awk
命令进行拆分:
awk '{ print > (/_test$/ ? "file1" : "file2") }' file
此
awk
命令将所有以数字开头的行复制到file1
,其余行复制到file2
您可以指定拆分的标准吗?以数字和字母开头的行?或者包含test和rest的行?这会覆盖每行的文件吗?因为它是一个单一的方向,并且针对每一行执行。在这种情况下,它应该被>>替换,并且文件可能会在BEGIN{}No insideawk
中被截断,甚至
的行为类似于>
,因此它不会为每一行重写。你是对的。gnu awk用户指南中规定:当使用这种类型的重定向时,输出文件在写入第一个输出之前被擦除。对同一输出文件的后续写入不会擦除输出文件,而是附加到输出文件。(这与在shell脚本中使用重定向的方式不同。)为什么有$0~
?@anubhava我想将以\u test
和\u rest
结尾的文件拆分为两个不同的文件。你的回答没有解决这个问题