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

How to shuffle multiple files and save different files?

我有三个文件:

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命令来解决。 您能否建议通过 shell 命令或脚本执行此操作的任何简单方法?

这是一个简单的脚本,可以执行您想要的操作。指定所有输入 命令行上的文件。它假定所有文件都具有相同的 行数。

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

#!/bin/bash

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

# Create shuffled order
lines=$(wc -l < "")
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