Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在文本文件中将单词剪切为换行符的脚本或命令_Shell_Unix_Perl_Sed - Fatal编程技术网

Shell 在文本文件中将单词剪切为换行符的脚本或命令

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

假设我有一个包含以下内容的文本文件(text1.txt):

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
      >