हेडर लाइन के बिना एक फ़ाइल में कई .txt फ़ाइलों को कैसे जोड़ें


0

मेरे पास प्रारूप के साथ 100,000 .xt फाइलें हैं:

bygrp,colnum,beta
100005,1,0.629519434191718
100005,2,-0.500000000026516
100005,3,0.560850895321124
100005,4,0.119624318119292
100005,5,0.257676682753309

और फ़ाइल नाम Job19_beta1.txt, ..., job19_beta100000.txt हैं

मैंने टोटलटेक्स्ट बनाया है। इसमें केवल हेडर लाइन शामिल है: बायग्रैप, कोलनम, बीटा।

मैं बिना किसी शीर्ष लेख के कुल फ़ाइलों में से केवल तीसरी पंक्ति (तालिका में 2 (तालिका में 2)) को कुल.txt के साथ जोड़ना चाहता हूं।

मैं इसे करने के लिए एक स्क्रिप्ट कैसे लिख सकता हूं? मुझे लगता है कि मुझे ... do ... लूप और उसके बाद लिखने की आवश्यकता है, लेकिन यह पता नहीं लगा सकता ...

मैं वास्तव में एसएएस विश्लेषक हूं, लेकिन एक प्रोजेक्ट मिला है जिसे डेटा अपलोड करने के लिए कमांड प्रॉम्प्ट का उपयोग करना आवश्यक है। मैंने बहुत सारे कोड गूँज लिए हैं लेकिन फिर भी स्क्रिप्ट को लेकर संघर्ष कर रहा हूँ। अग्रिम में धन्यवाद!


2
ऐसा लगता है [यह सवाल] [1] बहुत समान है। [१]: stackoverflow.com/questions/14939327/…
Xupicor

@Xupicor तो एक जवाब लिखने :)
Davidenko

1
@ डेविदेंको मैंने किया था - बिट यह तुच्छ था और इस प्रकार स्वचालित रूप से टिप्पणी में बदल गया था। : पी यह अच्छा है, क्योंकि मैं टिप्पणी करना चाहता था - लेकिन अभी तक विशेषाधिकार नहीं था। ;)
जुपिकोर

जवाबों:


0

फ़ाइल से फ़ाइल नाम पढ़ने के लिए:

while IFS= read -r filename; do
    sed 1d "$filename"
done < a.txt >> total.txt

अधिक कुशल, इसमें आपको हर फाइल के लिए sed नहीं लगाना है:

xargs awk 'FNR != 1' < a.txt >> total.txt

कमांड के रूप में जागृत करने के लिए कई फ़ाइल तर्क जमा होंगे।


0

लिनक्स में बैश पर परीक्षण (विंडोज़ के लिए गारंटी नहीं दे सकता है), यह आशाजनक लगता है:

for i in (*.txt)
do
tail -n +2 "$i" >> total.txt
done

-n +2के लिए tailआगे 2 लाइन आउटपुट, केवल पहली पंक्ति लंघन।

या a.txt में अपनी फ़ाइल सूची से पढ़ना (शायद बिल्ली का शानदार उपयोग, और अगर फ़िल्मी नामों में कोई नई कहानी नहीं है):

for i in $(cat a.txt)
do
tail -n +2 "$i" >> total.txt
done

या findफिर काम करना भी आसान होना चाहिए, शायद आसान हो अगर 100,000 टेक्स्ट फाइलें सभी एक ही फ़ोल्डर ट्री में हों और आपको कुछ खुदाई करने की आवश्यकता हो।

find folder/ -name "*.txt" -exec tail -n +2 '{}' >> total.txt  \;

0

मैं 100,000 फ़ाइलों से लेकर टोटल टक्सट तक के सभी डेटा को जोड़ना चाहता हूं, लेकिन हेडर के बिना क्योंकि यह टोटल टोटेक्स में पहले से मौजूद है

उस स्थिति में, और बैश और यूनिक्स शैली के उपकरणों का उपयोग करना:

tail -qn +2 job19_beta{1..100000}.txt >>total.txt

यह काम किस प्रकार करता है

  • job19_beta{1..100000}.txtउन फ़ाइलों की सूची का विस्तार करता है जिन्हें आप उनके सही क्रम में चाहते हैं ।

  • tail -qn +2 job19_beta{1..100000}.txt

    यह पंक्ति 2 से शुरू होने वाली सभी फ़ाइलों की सामग्री को स्टडआउट करने के लिए लिखता है।

    -n +2बताता tailलाइन 2. साथ शुरू करने के लिए -qकहता है tailचुप रहे और जब फ़ाइलों को बदल हेडर मुद्रित नहीं।

  • >>total.txt

    इससे पूंछ कमांड के आउटपुट को जोड़ा जा सकता है total.txt

वैकल्पिक उपयोग a.txt

यदि आप इसमें से फ़ाइल नाम पढ़ना चाहते हैं a.txt, तो:

while IFS= read -r fname; do tail -n +2 "$fname"; done <a.txt >>total.txt

आपने यह उल्लेख नहीं किया कि फ़ाइल नाम कैसे अलग किए जाते हैं a.txtइसलिए मैंने मान लिया कि वे प्रति पंक्ति एक हैं। (ध्यान दें कि फ़ाइल नामों के लिए संभव है कि उनके नामों में नई सूचियाँ हों, इसलिए यह एक सामान्य समाधान नहीं है।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.