如何随机播放多个文件并保存不同的文件?
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
我有三个文件:
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