我有两个文件,比如A.txt和B.txt,每个文件有100行。我想从文件A中随机选择10条记录(可以使用linux shuf
命令轻松完成)。但是现在我也希望从文件B获得相同的行数据。有没有简单的方法可以通过linux命令行来完成。
例如:以下是2个文件的记录,
A1 ........ A100
B1 ........ B100
如果从A生成的10个随机记录是A1,A3,A9等,那么我想要文件B中的B1,B3,B9等。
答案 0 :(得分:2)
这个bash
脚本将执行此操作,以args提供的两个文件:
for i in `seq 1 10`; do
NR=$(($RANDOM % 100 + 1))
echo -n "File $1, line $NR: "
sed "$NR"'q;d' "$1"
echo -n "File $2, line $NR: "
sed "$NR"'q;d' "$2"
done
例如。用法:
bash ./get10.sh long_file.txt longfile.txt
答案 1 :(得分:2)
一个选项是paste
两个文件在一起:
paste file_a file_b | shuf -n 10
要分隔这两个文件,您可以使用awk:
paste file_a file_b | shuf -n 10 | awk '{ print $1 > "a_sample"; print $2 > "b_sample" }'
默认情况下,粘贴将两个文件连接在一起,其中包含一个制表符,这与awk的默认字段分隔符一起使用。如果file_a
和file_b
中的实际数据包含空格(但没有标签),则可以使用awk -F'\t'
将输入字段分隔符设置为仅标签。