如何随机播放多个文件并保存不同的文件?

时间:2018-07-21 05:39:24

标签: shell shuffle

我有三个文件:

  

file1 file2 file3

     

A B C

     

D E F

     

G H I

每个文件中的行相互关联。 因此,我想将改组后的文件生成为:

  

file1.shuf file2.shuf file3.shuf

     

G H I

     

D E F

     

A B C

我经常遇到这种问题,我总是用Ruby或Python编写一个小脚本,但是我认为可以通过一些简单的shell命令来解决。 您能建议通过外壳命令或脚本执行此操作的任何简单方法吗?

1 个答案:

答案 0 :(得分:0)

这是一个简单的脚本,可以满足您的需求。指定所有输入 命令行上的文件。假设所有文件都相同 行数。

首先,它会创建一个数字列表并对其进行随机排序。然后结合 这些数字与每个输入文件一起进行排序并删除数字。 因此,每个输入文件都以相同的顺序随机播放。

#!/bin/bash

# Temp file to hold shuffled order
shuffile=$(mktemp)

# Create shuffled order
lines=$(wc -l < "$1")
digits=$(printf "%d" $lines | wc -c)
fmt=$(printf "%%0%d.0f" $digits)
seq -f "$fmt" $lines | shuf > $shuffile

# Shuffle each file in same way
for fname in "$@"; do
    paste $shuffile "$fname" | sort | cut -f 2- > "$fname.shuf"
done

# Clean up
rm $shuffile