我有一个巨大的 csv 文件,其中包含成对的独特组合:
A,B,0.1747
B,C,0.373
C,D,0.585
E,J,0.8585
E,A,0.5657
F,A,0.5656
我需要提取该文件的 200 个随机行,但我需要第 1 列和第 2 列中的字符串是唯一的,以便第 1 列和第 2 列字符串中的唯一字符串组合列表等于 400。
这里,3条随机线可能期望的输出是:
A,B,0.1747
C,D,0.585
E,J,0.8585
或
B,C,0.373
E,J,0.8585
F,A,0.5656
到目前为止,我已尝试使用以下方法将文件分别减少为第 1 列和第 2 列中的唯一字符串:
shuf file.csv | awk -F',' '!a[$1]++' | awk -F',' '!a[$2]++'
获得
B,C,0.373
E,A,0.5657
A,B,0.1747
C,D,0.585
但我认为这不是正确的方法。如果字符串已存在于两列中,是否有一种方法可以循环行而不考虑该行?
当您使用
awk
两次时,通常有一个更好的解决方案,只需一个 awk
脚本。你可以尝试:
shuf file.csv |
awk -F, '!(a[$1]+a[$2]) {a[$1]++; a[$2]++; n++; print} n==200 {exit}'