如何根据Unix中的字符从文件中随机选择行?

时间:2017-04-04 17:35:30

标签: unix

我想根据行中的前几个字符从文件中随机选择行。在我的文件中,前几个字符被命名为“Hybrid:2”,“Hybrid:19”等。我想从每个Hybrid类别中随机选择一条代表性的行。

我的文件格式如下:

Hybrid: 2 Parents: 12 and 49     9.419642 0.000000
Hybrid: 2 Parents: 15 and 49     6.427708 0.000000
Hybrid: 2 Parents: 16 and 49     8.383469 0.000000
Hybrid: 2 Parents: 17 and 49     7.869732 0.000000
Hybrid: 19 Parents: 2 and 23     6.905067 0.000000
Hybrid: 19 Parents: 2 and 30     7.913185 0.000000
Hybrid: 19 Parents: 2 and 57     10.724088 0.000000
Hybrid: 52 Parents: 2 and 23     9.398697 0.000000
Hybrid: 44 Parents: 2 and 30     7.739156 0.000000
Hybrid: 50 Parents: 2 and 30     10.051190 0.000000

我想制作这样的文件:

Hybrid: 2 Parents: 15 and 49     6.427708 0.000000
Hybrid: 19 Parents: 2 and 23     6.905067 0.000000
Hybrid: 52 Parents: 2 and 23     9.398697 0.000000
Hybrid: 44 Parents: 2 and 30     7.739156 0.000000
Hybrid: 50 Parents: 2 and 30     10.051190 0.000000

我认为shuf会有用,但我看不到如何在这里应用它。我不知道如何处理这个,所以任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:1)

获得独特的系列(Hybrid 19,Hybrid 52,Hybrid 44,Hybrid 50,Hybrid 2)。在此之后洗牌文件。随机播放将返回文件中随机排列的行。获取洗牌文件的第一行。

执行此操作的代码如下

将以下脚本复制到文件UniqueLines.sh

#!/bin/bash

filePath=$1
cat $filePath | awk '{print $2}' | uniq > /tmp/unique_ids
for i in `cat /tmp/unique_ids`;do shuf file.txt | grep "Hybrid: $i " | head -1;done;

授予运行脚本的权限

chmod +x UniqueLines.sh

运行脚本

./UniqueLines.sh <full path to file>

Example:
./UniqueLines.sh /root/myfile.txt