从文件中随机选择几行,然后从第二个文件中选择相同的行号

时间:2016-01-18 19:00:24

标签: linux shell random shuffle

我有两个文件,比如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等。

2 个答案:

答案 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_afile_b中的实际数据包含空格(但没有标签),则可以使用awk -F'\t'将输入字段分隔符设置为仅标签。