我想根据行中的前几个字符从文件中随机选择行。在我的文件中,前几个字符被命名为“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会有用,但我看不到如何在这里应用它。我不知道如何处理这个,所以任何帮助都会受到赞赏!
答案 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