1

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

TAG 97
//S211130000059564  SE0000273294
//SE0000112724
MDGF 348

对于以 // 开头的行,如果有第二个单词,我想在下一行打印那个单词,所以上面的文件 text1.txt 将变为:

TAG 97
//S211130000059564  
SE0000273294
//SE0000112724
MDGF 348

任何人都可以帮我解决这个问题,请..

4

3 回答 3

1

执行此操作:

perl -pe 's@^(//\S+)\s+(\S+)@$1\n$2@' file.txt

或使用 GNU

sed -r 's@^(//\S+)\s+(\S+)@\1\n\2@' file.txt

(感谢史蒂夫

输出

TAG 97
//S211130000059564
SE0000273294
//SE0000112724
MDGF 348

简短的解释

  • perl我在&中都使用了替换机制sed,它们都做同样的事情
  • @用作分隔符(任意选择,选择您想要的任何字符)
于 2012-11-21T12:25:31.470 回答
1

这是一种使用方法awk

awk '/^\/\// && NF == 2 { print $1 ORS $2; next }1' file

结果:

TAG 97
//S211130000059564  
SE0000273294
//SE0000112724
MDGF 348
于 2012-11-21T12:25:31.693 回答
0
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
> 
于 2012-11-21T12:37:36.503 回答