Shell 在文本文件中将单词剪切为换行符的脚本或命令
假设我有一个包含以下内容的文本文件(text1.txt):Shell 在文本文件中将单词剪切为换行符的脚本或命令,shell,unix,perl,sed,Shell,Unix,Perl,Sed,假设我有一个包含以下内容的文本文件(text1.txt): TAG 97 //S211130000059564 SE0000273294 //SE0000112724 MDGF 348 对于以//开头的一行,如果有第二个单词,我希望在下一行中打印该单词,因此上述文件text1.txt将变为: TAG 97 //S211130000059564 SE0000273294 //SE0000112724 MDGF 348 TAG 97 //S211130000059564 SE00002
TAG 97
//S211130000059564 SE0000273294
//SE0000112724
MDGF 348
对于以//开头的一行,如果有第二个单词,我希望在下一行中打印该单词,因此上述文件text1.txt将变为:
TAG 97
//S211130000059564
SE0000273294
//SE0000112724
MDGF 348
TAG 97
//S211130000059564
SE0000273294
//SE0000112724
MDGF 348
有人能帮我吗?请尝试使用:
或使用GNU:
(谢谢)
输出
TAG 97
//S211130000059564
SE0000273294
//SE0000112724
MDGF 348
简短解释
- 我在
和perl
中都使用了替换机制,它们的作用是相同的sed
- 我使用
作为分隔符(任意选择,选择您想要的任何字符)@
- 这里有一种方法可以使用
awk
:
awk '/^\/\// && NF == 2 { print $1 ORS $2; next }1' file
结果:
测试如下:
> cat temp
TAG 97
//S211130000059564 SE0000273294
//SE0000112724
MDGF 348
> awk '{if($0~/\/\// && $2)print $1"\n"$2; else print}' temp
TAG 97
//S211130000059564
SE0000273294
//SE0000112724
MDGF 348
>
+1您也可以使用
gnused
:sed-r的@^(//\s+)\s+(\s+)@\1\n\2@'file.txt
TAG 97
//S211130000059564
SE0000273294
//SE0000112724
MDGF 348
awk '{if($0~/\/\// && $2)print $1"\n"$2; else print}' your_file
> cat temp
TAG 97
//S211130000059564 SE0000273294
//SE0000112724
MDGF 348
> awk '{if($0~/\/\// && $2)print $1"\n"$2; else print}' temp
TAG 97
//S211130000059564
SE0000273294
//SE0000112724
MDGF 348
>