2017-06-13 26 views
1

好日子的底部添加它,如何提取字符串组,并在文件

我有显示这样的文件:

Bin 1 = 5778 669 753 731 743 752 727 736 667  
Bin 5 = 2  2 0 0 0 0 0 0 0  Bin 7 = 63  36 5 1 1 5 1 5 9  
Bin 9 = 0  0 0 0 0 0 0 0 0  Bin 24 = 2  0 0 0 0 0 0 0 2  
Bin 31 = 0  0 0 0 0 0 0 0 0  Bin 47 = 28  2 4 6 1 2 5 3 5  
Bin 70 = 1  0 0 0 0 0 1 0 0  Bin 95 = 1  0 1 0 0 0 0 0 0  
Bin 120 = 1  0 1 0 0 0 0 0 0  Bin 121 = 162  49 13 11 10 3 10 12 54  
Bin 131 = 7  1 1 2 0 0 1 0 2  Bin 133 = 3  0 0 0 0 0 0 0 3  
Bin 141 = 6  0 0 0 1 0 1 2 2  Bin 560 = 1  0 0 0 1 0 0 0 0  
Bin 620 = 1  0 0 0 1 0 0 0 0  Bin 630 = 2  0 0 1 0 0 0 0 1  
Bin 1250 = 1  0 0 0 0 0 1 0 0  Bin 1410 = 1  0 1 0 0 0 0 0 0  
Bin 2004 = 1  0 0 0 0 0 0 1 0  Bin 2240 = 1  0 0 0 0 1 0 0 0  
Bin 2247 = 1  0 0 1 0 0 0 0 0  Bin 2300 = 1  0 0 0 0 1 0 0 0  
Bin 2309 = 1  0 0 0 1 0 0 0 0  Bin 2310 = 3  1 1 0 0 0 0 0 1  
Bin 2602 = 1  0 0 0 1 0 0 0 0  

我想削减第二届“宾“模式及其右侧的值并粘贴到文件底部,然后再进行排序。感谢您对我这个问题的帮助。我只是unix命令中的新成员,仍然在学习它。提前致谢。

我想有这样的输出。

Bin 1 = 5778 669 753 731 743 752 727 736 667  
Bin 5 = 2  2 0 0 0 0 0 0 0  
Bin 7 = 63  36 5 1 1 5 1 5 9  
Bin 9 = 0  0 0 0 0 0 0 0 0  
Bin 24 = 2  0 0 0 0 0 0 0 2  
Bin 31 = 0  0 0 0 0 0 0 0 0  
Bin 47 = 28  2 4 6 1 2 5 3 5  
Bin 70 = 1  0 0 0 0 0 1 0 0  
Bin 95 = 1  0 1 0 0 0 0 0 0  
Bin 120 = 1  0 1 0 0 0 0 0 0  
Bin 121 = 162  49 13 11 10 3 10 12 54  
Bin 131 = 7  1 1 2 0 0 1 0 2  
Bin 133 = 3  0 0 0 0 0 0 0 3  
Bin 141 = 6  0 0 0 1 0 1 2 2  
Bin 560 = 1  0 0 0 1 0 0 0 0  
Bin 620 = 1  0 0 0 1 0 0 0 0  
Bin 630 = 2  0 0 1 0 0 0 0 1  
Bin 1250 = 1  0 0 0 0 0 1 0 0  
Bin 1410 = 1  0 1 0 0 0 0 0 0  
Bin 2004 = 1  0 0 0 0 0 0 1 0  
Bin 2240 = 1  0 0 0 0 1 0 0 0  
Bin 2247 = 1  0 0 1 0 0 0 0 0  
Bin 2300 = 1  0 0 0 0 1 0 0 0  
Bin 2309 = 1  0 0 0 1 0 0 0 0  
Bin 2310 = 3  1 1 0 0 0 0 0 1  
Bin 2602 = 1  0 0 0 1 0 0 0 0 

方面,麦克

+3

显示您当前的工作和后期所期望的结果 – RomanPerekhrest

+0

喜@RomanPerekhrest,抱歉地说,我没有拿出任何解决办法呢,我一直念叨的sed和awk,但我不知道如何开始,只是不知道如何开始,对不起 – Mike

+0

然后做第二个动作:*发布所需的结果* – RomanPerekhrest

回答

2

awk的方法:

awk 'NF>12{ $13= ORS $13 }1' file | column -t 
  • NF - 字段

    的总数
  • NF>12 - 根据预期的结果字段的最大数目为12。非空白序列被视为一个字段

  • $13= ORS $13 - 打破记录在第13场的记录分隔符ORS(换行符charac之三)

输出:

Bin 1  = 5778 669 753 731 743 752 727 736 667 
Bin 5  = 2  2 0 0 0 0 0 0 0 
Bin 7  = 63 36 5 1 1 5 1 5 9 
Bin 9  = 0  0 0 0 0 0 0 0 0 
Bin 24 = 2  0 0 0 0 0 0 0 2 
Bin 31 = 0  0 0 0 0 0 0 0 0 
Bin 47 = 28 2 4 6 1 2 5 3 5 
Bin 70 = 1  0 0 0 0 0 1 0 0 
Bin 95 = 1  0 1 0 0 0 0 0 0 
Bin 120 = 1  0 1 0 0 0 0 0 0 
Bin 121 = 162 49 13 11 10 3 10 12 54 
Bin 131 = 7  1 1 2 0 0 1 0 2 
Bin 133 = 3  0 0 0 0 0 0 0 3 
Bin 141 = 6  0 0 0 1 0 1 2 2 
Bin 560 = 1  0 0 0 1 0 0 0 0 
Bin 620 = 1  0 0 0 1 0 0 0 0 
Bin 630 = 2  0 0 1 0 0 0 0 1 
Bin 1250 = 1  0 0 0 0 0 1 0 0 
Bin 1410 = 1  0 1 0 0 0 0 0 0 
Bin 2004 = 1  0 0 0 0 0 0 1 0 
Bin 2240 = 1  0 0 0 0 1 0 0 0 
Bin 2247 = 1  0 0 1 0 0 0 0 0 
Bin 2300 = 1  0 0 0 0 1 0 0 0 
Bin 2309 = 1  0 0 0 1 0 0 0 0 
Bin 2310 = 3  1 1 0 0 0 0 0 1 
Bin 2602 = 1  0 0 0 1 0 0 0 0 
+0

嗨@RomanPerekhrest,你的代码工作,非常感谢,介意如果你能解释它是如何工作的,再次感谢 – Mike

+0

@Mike,看我的详细信息 – RomanPerekhrest

+0

非常感谢帮助,我现在明白了。再一次,真的很感谢帮助 – Mike

1
sed 's/ \(Bin.*\)$/\n\1/g' file | sort -k 2 -n > outputfile 

此搜索具有空间,其次是“宾”和任何字符,直到行的其余部分开头的字符串。
放置在逃逸的部分,可以在命令的替换部分引用\1。你在那里插入一个换行符。

排序部分取参数

  • -k 2
  • -n(数值排序)(在第二列排序)

输出:

# sed 's/ \(Bin.*\)$/\n\1/g' your_file | sort -k 2 -n 
Bin 1 = 5778 669 753 731 743 752 727 736 667 
Bin 5 = 2  2 0 0 0 0 0 0 0 
Bin 7 = 63  36 5 1 1 5 1 5 9 
Bin 9 = 0  0 0 0 0 0 0 0 0 
Bin 24 = 2  0 0 0 0 0 0 0 2 
Bin 31 = 0  0 0 0 0 0 0 0 0 
Bin 47 = 28  2 4 6 1 2 5 3 5 
Bin 70 = 1  0 0 0 0 0 1 0 0 
Bin 95 = 1  0 1 0 0 0 0 0 0 
Bin 120 = 1  0 1 0 0 0 0 0 0 
Bin 121 = 162  49 13 11 10 3 10 12 54 
Bin 131 = 7  1 1 2 0 0 1 0 2 
Bin 133 = 3  0 0 0 0 0 0 0 3 
Bin 141 = 6  0 0 0 1 0 1 2 2 
Bin 560 = 1  0 0 0 1 0 0 0 0 
Bin 620 = 1  0 0 0 1 0 0 0 0 
Bin 630 = 2  0 0 1 0 0 0 0 1 
Bin 1250 = 1  0 0 0 0 0 1 0 0 
Bin 1410 = 1  0 1 0 0 0 0 0 0 
Bin 2004 = 1  0 0 0 0 0 0 1 0 
Bin 2240 = 1  0 0 0 0 1 0 0 0 
Bin 2247 = 1  0 0 1 0 0 0 0 0 
Bin 2300 = 1  0 0 0 0 1 0 0 0 
Bin 2309 = 1  0 0 0 1 0 0 0 0 
Bin 2310 = 3  1 1 0 0 0 0 0 1 
Bin 2602 = 1  0 0 0 1 0 0 0 0 
+0

嗨@fancyPants,我试过你的代码,但它只是添加了“n”在该行的开始。 Bin字符串前面没有空格,您可以修改它,谢谢输入 – Mike

+0

您是否复制并粘贴了我的代码?听起来你在n之前忘了反斜杠。 – fancyPants

+0

是的,我复制并粘贴它们。我再次做了,但结果是一样的 – Mike

0

如果文本的结构,它可能是足以与cut,例如:

(cut -c1-56 infile; cut -c62- infile) | sort -k2n 

输出:

Bin 1 = 5778 669 753 731 743 752 727 736 667 
Bin 5 = 2  2 0 0 0 0 0 0 0 
Bin 7 = 63  36 5 1 1 5 1 5 9  
Bin 9 = 0  0 0 0 0 0 0 0 0 
Bin 24 = 2  0 0 0 0 0 0 0 2  
Bin 31 = 0  0 0 0 0 0 0 0 0 
Bin 47 = 28  2 4 6 1 2 5 3 5  
Bin 70 = 1  0 0 0 0 0 1 0 0 
Bin 95 = 1  0 1 0 0 0 0 0 0  
Bin 120 = 1  0 1 0 0 0 0 0 0 
Bin 121 = 162  49 13 11 10 3 10 12 54  
Bin 131 = 7  1 1 2 0 0 1 0 2 
Bin 133 = 3  0 0 0 0 0 0 0 3  
Bin 141 = 6  0 0 0 1 0 1 2 2 
Bin 560 = 1  0 0 0 1 0 0 0 0  
Bin 620 = 1  0 0 0 1 0 0 0 0 
Bin 630 = 2  0 0 1 0 0 0 0 1  
Bin 1250 = 1  0 0 0 0 0 1 0 0 
Bin 1410 = 1  0 1 0 0 0 0 0 0  
Bin 2004 = 1  0 0 0 0 0 0 1 0 
Bin 2240 = 1  0 0 0 0 1 0 0 0  
Bin 2247 = 1  0 0 1 0 0 0 0 0 
Bin 2300 = 1  0 0 0 0 1 0 0 0  
Bin 2309 = 1  0 0 0 1 0 0 0 0 
Bin 2310 = 3  1 1 0 0 0 0 0 1  
Bin 2602 = 1  0 0 0 1 0 0 0 0 
+0

这也适用,非常感谢您的意见,非常感谢 – Mike