将随机行打印到不同的文本文件中



我想做的是将文本文件a中的一行随机打印到文本文件B中,而不必两次选择同一行。因此,如果文本文件B中有一行数字为25,它将不会从文本文件a 中选择该行

我已经学会了如何将一行从文本文件a随机打印到文本文件B,但是,我不知道如何确保它不会两次选择同一行。

echo "$(printf $(cat A.txt | shuf -n 1))" > /home/B.txt
grep -Fxv -f B A | shuf -n 1 >> B

第一部分(grep(将AB的差异打印到stdout,即A中存在但B中不存在的行:

  • -F--将模式解释为固定字符串,而不是正则表达式
  • -x—仅选择与整行完全匹配的匹配项
  • -v——反转匹配感
  • -f FILE——从FILE中获取模式

第二部分(shuf -n 1(从stdin打印随机行。输出附加到B

这不是真的"随机";,然后没关系。

请尝试以下awk解决方案-我认为它实现了您想要实现的目标。

$ cat A
11758
1368
26149
2666
27666
11155
31832
11274
21743
25
$ cat B
18518
8933
941
32286
1234
25
1608
5284
23040
19028
$ cat pseudo
BEGIN{
"bash -c 'echo ${RANDOM}'"|getline seed  # Generate a random seed
srand(seed)                              # use random seed, otherwise each repeated run will generate the same random sequence
count=0                                  # set a counter 
}
NR==FNR{                                   # while on the first file, remember every number; note this will weed out duplicates!
b[$1]=1
}
!($1 in b) {                               # for numbers we haven't seen yet (so on the second file, ignoring ones present in file B)
a[count]=$1                              # remember new numbers in an associative array with an integer index
count++
}
END{
r=(int(rand() * count))                  # generate a random number in the range of our secondary array's index values
print a[r] >> "B"                        # print that randomly chosen element to the last line of file B
}
$ awk -f pseudo B A
$ cat B
18518
8933
941
32286
1234
25
1608
5284
23040
19028
27666
$
$ awk -f pseudo B A
$ cat B
18518
8933
941
32286
1234
25
1608
5284
23040
19028
27666
31832

相关内容

  • 没有找到相关文章

最新更新