निर्देशिका में प्रत्येक फ़ाइल से पहली पंक्ति का चयन कैसे करें और इसे एक नई पाठ फ़ाइल में प्रिंट करें


13

मेरे पास कई .txtफाइलों के साथ एक निर्देशिका है ।

इन फ़ाइलों में से प्रत्येक से, मैं पहली पंक्ति का चयन करना चाहता हूं और इसे एक नई .txtफ़ाइल में प्रिंट करना चाहता हूं (सभी पहली पंक्तियों की सूची प्राप्त करने के लिए)।

मैंने इसे awkऔर sedकमांड के साथ आज़माया और इसे लूप के साथ जोड़ दिया, लेकिन सफलता के बिना।


1
आप एक प्रतिष्ठा 6 उपयोगकर्ता हैं, के रूप में: अगर anwsers के किसी भी नीचे आप में मदद की, क्लिक करने के लिए ग्रे मत भूलना में अपने पाठ, जिसका अर्थ है की बाईं हाँ, इस उत्तर मान्य है ! ;-)
फबी 3

जवाबों:


21

उपयोग करें head:

head -n1 -q *.txt > new-file
  • -n1headकेवल पहली पंक्ति निकालने के लिए कहता है।
  • -q सिर को फ़ाइल नाम नहीं छापने के लिए कहता है।

9

का उपयोग कर grep:

grep -m 1 '.' *.txt >output.file

grepकिसी भी वर्ण से मेल खाएगा और पहले मैच के बाद बाहर निकल जाएगा अर्थात grepसभी इनपुट फ़ाइलों की पहली पंक्तियों को आउटपुट करेगा और हम उन लोगों को सहेज रहे हैं out.txt


1
मुझे यह पसंद है, यह एक अच्छा सा हैक है।
हाशिम

2

केवल बैश का उपयोग करना:

for f in *.txt; do <"$f" read line; printf "$line\n" >>new.txt; done
  • *.txt.txtवर्तमान कार्य निर्देशिका के साथ समाप्त होने वाले फ़ोल्डर / फ़ाइलों की सूची में विस्तारित है (क्योंकि केवल फ़ाइलों के साथ समाप्त होने वाले फ़ोल्डर .txtचिंता का विषय नहीं हैं);
  • <"$f" read lineइसमें संग्रहीत फ़ाइल पथ से एक पंक्ति पढ़ता है fऔर इसे संग्रहीत करता है line;
  • printf "$line\n" >>new.txt: की सामग्री को जोड़ता lineहै new.txt;
% cat foo.txt 
line #1 in foo
line #2 in foo
line #3 in foo

% cat bar.txt
line #1 in bar
line #2 in bar
line #3 in bar

% for f in *.txt; do <"$f" read line; printf "$line\n" >>new.txt; done

% cat new.txt 
line #1 in bar
line #1 in foo

kos, थोड़ा लंबा है लेकिन यहाँ +1 है
हेमायल

@heemayl लेकिन यह केवल बैश है। ;)
कोस

1
बीटीडब्ल्यू
वें

1
@ हेमेयेल धन्यवाद: डी। ईमानदारी से मैं पागल की तरह साइट की जाँच कर रहा हूँ सिर्फ एक सवाल की रक्षा के लिए पागलों की तरह XD
kos

0

आपने इसके साथ कोशिश की है awk, यहां एक awkसंस्करण है

awk 'FNR==1 {print} {nextfile}' *.txt > out

0

AWK के साथ एक और दृष्टिकोण AWK को प्रिंट करने के लिए कहना है, लेकिन फिर तुरंत अगली फ़ाइल पर जाएं

tmp:$ touch file1 file2 file3

tmp:$ printf  "Line 1 \n Line 2" | tee file1 file2 file3
Line 1 
 Line 2
tmp:$ awk '{print;nextfile}' file1 file2 file3
Line 1 
Line 1 
Line 1

sedविशिष्ट लाइनों की छपाई की भी अनुमति देता है। यहाँ मैंने उसके साथ संयुक्त किया हैfind

tmp:$ find . -name "file*" -exec  sed -n '1p' {} \;                            
Line 1 
Line 1 
Line 1 

और पर्ल:

tmp:$ find . -name "file*"  -exec perl -ne 'print  if 1..1' {} \;              
Line 1 
Line 1 
Line 1 

अंतिम किन्तु अप्रमुख नहीं , grep

tmp:$ grep -n 1 file1 file2 file3                                              
file1:1:Line 1 
file2:1:Line 1 
file3:1:Line 1 

सब कुछ एक फ़ाइल में सहेजना > outputFile.txtइन आदेशों के अंत में लागू करने की बात है ।

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