2016-01-18 34 views
0

選擇同一行號我有2個文件,說A.TXT和B.txt,每一個具有100行。我想從文件A中隨機選擇10條記錄(可以使用linux shuf命令輕鬆完成)。但是現在我需要從文件B的同一行數據。有沒有簡單的方法通過linux命令行來完成它。隨機選擇從一個文件的幾行,然後從第二個文件

對於實施例:以下是從2個檔,
A1 ........ A100
B1 ........ B100

記錄如果從生成的10點隨機的記錄是A1,A3,A9等,然後我想B1,B3,B9,等從文件B.

回答

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

+0

它工作得很好。但對於一些記錄它提供了以下錯誤和失敗: 的sed:-e表達式#1,燒焦2:行地址的無效使用0 任何想法如何克服它??? – Shweta

+0

右,sed從1開始計算行數,而不是0.因此它應該是'$(($ RANDOM%100 + 1))'那裏(取消答案)。 – Marqin

+1

RANDOM可以多次返回相同的NR /行。 Te原始shuf會給出10條不同的路線,但是OP要求隨機記錄。不太清楚需要什麼。 –

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'輸入字段分隔符設置爲只選項卡。

+0

這非常簡單易懂,謝謝。只需稍作修改,就需要使用awk命令添加-F'\ t',因爲粘貼會生成製表符分隔的數據。 – Shweta

+0

不客氣。實際上,默認的輸入字段分隔符很好,因爲它適用於任何類型的空格,所以除非輸入文件也包含空格,否則不需要更改它。 –

相關問題