我有三个文件:
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命令来解决。 您能建议通过外壳命令或脚本执行此操作的任何简单方法吗?
答案 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