如何提取字符串组并将其附加到文件底部
How to extract group of strings and append it at the bottom of the file
美好的一天,
我有一个文件显示如下:
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
我想剪切第二个 "Bin" 模式及其右侧的值,并将其粘贴到文件底部,稍后再对其进行排序。感谢您对我的这个问题的帮助。我只是 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
关注,迈克
sed 's/ \(Bin.*\)$/\n/g' file | sort -k 2 -n > outputfile
这将搜索以 space 开头的字符串,然后是 "Bin" 以及直到该行其余部分的任何字符。
放在转义括号中的部分,可以在命令的替换部分用</code>引用。在它之前插入一个换行符。 </p>
<p>排序部分接受参数</p>
<ul>
<li>-k 2(按第二列排序)</li>
<li>-n(数字排序)</li>
</ul>
<p>输出:</p>
<pre><code># sed 's/ \(Bin.*\)$/\n/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
短awk方法:
awk 'NF>12{ = ORS }1' file | column -t
NF
- 字段总数
NF>12
- 根据您的预期结果,最大字段数为 12。非空白 序列被视为一个字段
= ORS
- 在第 13 个字段用记录分隔符 ORS
(换行符)
拆分记录
输出:
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
如果文本是结构化的,使用 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
美好的一天,
我有一个文件显示如下:
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
我想剪切第二个 "Bin" 模式及其右侧的值,并将其粘贴到文件底部,稍后再对其进行排序。感谢您对我的这个问题的帮助。我只是 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
关注,迈克
sed 's/ \(Bin.*\)$/\n/g' file | sort -k 2 -n > outputfile
这将搜索以 space 开头的字符串,然后是 "Bin" 以及直到该行其余部分的任何字符。
放在转义括号中的部分,可以在命令的替换部分用</code>引用。在它之前插入一个换行符。 </p>
<p>排序部分接受参数</p>
<ul>
<li>-k 2(按第二列排序)</li>
<li>-n(数字排序)</li>
</ul>
<p>输出:</p>
<pre><code># sed 's/ \(Bin.*\)$/\n/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
短awk方法:
awk 'NF>12{ = ORS }1' file | column -t
NF
- 字段总数NF>12
- 根据您的预期结果,最大字段数为 12。非空白 序列被视为一个字段= ORS
- 在第 13 个字段用记录分隔符ORS
(换行符) 拆分记录
输出:
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
如果文本是结构化的,使用 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