एकाधिक फ़ाइलों से डेटा का 9 वां कॉलम प्राप्त करना और इसे नई फ़ाइल में डंप करना


1

ठीक है दोस्तों, मेरे पास 24 सबफ़ोल्डर हैं, जिनका नाम Angle1, Angle2, आदि हैं, जो Angle24 तक हैं, प्रत्येक में output.txt नामक एक फाइल है। ध्यान दें कि इन फ़ोल्डरों में सबफ़ोल्डर हैं जिन्हें मैं अनदेखा करना चाहता हूं।

क्या इन फ़ोल्डरों के माध्यम से लूप करने का एक तरीका है और डेटा का 9 वां कॉलम लेना है (वर्ण द्वारा 9 वां कॉलम नहीं है, डेटा कई वर्ण लंबा हो सकता है लेकिन प्रत्येक कॉलम एक स्थान से अलग होता है)। और सभी output.txt फ़ाइलों में से प्रत्येक 9 वां कॉलम एक नई फ़ाइल में डालें, जिसे पैरेंट डायरेक्टरी में Total.txt कहा जाता है? तो मैं अंततः डेटा के 24 स्तंभों के साथ Total.txt नामक एक फ़ाइल, जहां पहला कॉलम Angle1, आदि में output.txt के स्तंभ 9 से मेल खाती है, आदि।

मुझे इसे पॉवरशेल में करने की आवश्यकता है।


यह सुपरसर्वर . com/questions/915465/… का डुप्लिकेट प्रतीत होता है । क्या आप बता सकते हैं कि यह सवाल अलग कैसे है? आम तौर पर, यदि आपको ऐसा उत्तर नहीं मिल रहा है जो आपकी आवश्यकताओं को पूरा करता है, तो आपको मूल प्रश्न को स्पष्ट करना चाहिए।
फिक्सर 1234

यह अलग है क्योंकि दूसरे में मैं निर्दिष्ट लिनक्स ठीक था, यहाँ मुझे शब्दाडंबर में उत्तर की आवश्यकता है। मैं साइबरविन
जैक्सन हार्ट

दूसरे प्रश्न में पहले से ही पॉवर्सशेल शामिल है। मैंने इसे और अधिक स्पष्ट करने के लिए टैग जोड़ा है, जो इसे सक्रिय प्रश्न सूची में भी ताज़ा करेगा। यदि आपका प्रश्न उत्तर को आकर्षित करने वाला है, तो मूल प्रश्न को करना चाहिए। डुप्लिकेट प्रश्न साइट को अव्यवस्थित करते हैं।
फिक्सर 1234

जवाबों:


0

शक्तियां कमांड-लाइन, निर्देशिका बनाएं, यहां चलाएं D:\Data Set\:

powershell 1..24^|%{md ('Angle'+$_)}

powerhell कमांड-लाइन, टेस्ट डेटा बनाएँ:

powershell $i=0;$d='D:\Data Set\';$r=New-Object -T Random;1..24^|%{++$i;1..(random(11..17))^|%{$s='';1..20^|%{$rn=$r.Next();$s+=''+$rn+' '};$s.Trim();$s^|ac ($d+'Angle'+$i+'\output.txt')}}
  • $ r = न्यू-ऑब्जेक्ट -T रैंडम - रैंडम ऑब्जेक्ट बनाएँ
  • $ s.Trim () - अंतरिक्ष छोड़ दिया और स्ट्रिंग के कठोर पक्ष को हटा दें

पॉवर्सशेल फ़ाइल चलाएँ:

powershell .\PasteD.ps1

PasteD.ps1, कॉलम प्राप्त करें और लिखें:

$d='D:\Data Set\' # work directory
$FileNum=24       # part path and filename
$Coln=9           # - 9th column
$LineMax=0        # init variable maximum line at text file
$dlm=' '          # delimiter

$i=0;1..$FileNum|%{++$i;$LineMax=[Math]::Max($LineMax,(gc ($d+'Angle'+$i+'\output.txt')|Measure).Count)}
# (gc <file name>|Measure).Count) - get line count at text file
# [Math]::Max - get Maximum line count at all file
# 1..$FileNum - cycle at Angle1, Angle2, etc up to Angle24 directory

# way init array: 

#$arS =,''*$LineMax
#$arS =@('')*$LineMax
#$arS=[array]::CreateInstance('String', $LineMax)
#$arS=New-Object 'object[]' $LineMax
[string[]]$arS=@('')*$LineMax

For($i=0; $i -lt $FileNum-1; $i++) {
$f=gc ($d+'Angle'+($i+1)+'\output.txt') # get content file in Angle1..Angle23 dir

  For($j=0; $j -lt $f.length; $j++) {
  $arS[$j]=$arS[$j] + ($f[$j]-split' ')[$Coln-1] + $dlm # add value and delimiter
  }
  For($j=$f.length; $j -lt $LineMax; $j++) {
  $arS[$j]=$arS[$j] + $dlm # add delimiter and empty value
  }
}

$f=gc ($d+'Angle'+($FileNum)+'\output.txt') # get content file in Angle24 dir

  For($j=0; $j -lt $f.length; $j++) {
  $arS[$j]=$arS[$j] + ($f[$j]-split' ')[$Coln-1] # after last column not add delimiter
  }

$arS|ac($d+'\total.txt') # save string array to result file
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.