python - किसी अन्य फाइल में लाइन नंबरों के आधार पर एक फ़ाइल से लाइन उठाएं




bash awk (2)

आप यह भी कर सकते हैं, Python भीतर, इस उदाहरण की तरह:

with open("address_file", 'r') as f1, open("data_file", "r") as f2:
    data1 = f1.read().splitlines()
    data2 = f2.read().splitlines()

for k in data1:
    # Handle exceptions if there is any
    try:
        print(data2[int(k)-1])
    except Exception:
        pass

संपादित करें: जैसा कि सुझाव दिया गया है @ हेमयाल, यहां केवल एक list का उपयोग करके एक और समाधान है:

with open("file1", 'r') as f1, open("file2", 'r') as f2:
    data = f2.read().splitlines()

    for k in f1.read().splitlines():
        print(data[int(k)-1])

दोनों आउटपुट होंगे:

2.000589214
4.479511994
6.784499874
7.021239396
1.000451451
3.117892278
5.484514874

मेरे पास दो फाइलें हैं- इनमें से एक पते (लाइन नंबर) और दूसरे एक डेटा है, जैसे:

पता फाइल:

2
4
6
7
1
3
5

डेटा फ़ाइल

1.000451451
2.000589214
3.117892278
4.479511994
5.484514874
6.784499874
7.021239396

मैं पता फाइलों की संख्या के आधार पर डेटा फ़ाइल को यादृच्छिक करना चाहता हूं ताकि मैं प्राप्त कर सकूं:

2.000589214
4.479511994
6.784499874
7.021239396
1.000451451
3.117892278
5.484514874

मैं इसे या तो अजगर में या बाश में करना चाहता हूं, लेकिन अभी तक कोई समाधान नहीं मिला


यदि आप sed ध्यान नहीं देते हैं, तो हम इसे आसानी से प्राप्त करने के लिए प्रक्रिया प्रतिस्थापन का उपयोग कर सकते हैं:

sed -nf <(sed 's/$/p/' addr.txt) data.txt
  • -n डिफ़ॉल्ट मुद्रण को दबाता है
  • -f प्रक्रिया प्रतिस्थापन से कमांड पढ़ता है <(...)
  • <(sed 's/$/p/' addr.txt) addr.txt में लाइन नंबरों पर आधारित sed प्रिंट कमांड बनाता है

आउटपुट देता है:

2.000589214
4.479511994
6.784499874
7.021239396
1.000451451
3.117892278
5.484514874




awk