ディレクトリ内の各ファイルから最初の行を選択して、新しいテキストファイルに印刷する方法


13

いくつかの.txtファイルがあるディレクトリがあります。

これらの各ファイルから、最初の行を選択し、それを新しい.txtファイルに印刷します(すべての最初の行のリストを取得します)。

awkand sedコマンドで試し、ループと組み合わせましたが、成功しませんでした。


1
あなたは評判6ユーザーだとして:以下anwsersのいずれかがあなたを助けている場合、グレーをクリックすることを忘れないでください☑を意味し、そのテキストの左側で[はい、この答えは有効です;-)
ファビー

回答:


21

使用head

head -n1 -q *.txt > new-file
  • -n1head最初の行のみを抽出するように指示します。
  • -q ファイル名を出力しないようにheadに指示します。

9

を使用してgrep

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

grepは、任意の文字に一致し、最初の一致後に終了しgrepます。つまり、すべての入力ファイルの最初の行を出力し、それらをに保存しout.txtます。


1
私はこれが好きです、それはすてきな小さなハックです。
ハシム

2

Bashのみを使用する:

for f in *.txt; do <"$f" read line; printf "$line\n" >>new.txt; done
  • *.txt.txt現在の作業ディレクトリで終わるフォルダー/ファイルのリストに展開されます(フォルダーで終わるファイルのみ.txtが問題にならないため)。
  • <"$f" read lineに保存されているファイルパスから1行を読み取りf、保存しlineます。
  • printf "$line\n" >>new.txtlineto の内容を追加し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

コス、少し長いが、ここは+1です。
heemayl

@heemaylしかし、それはBashのみです。;)
コス

1
ところで、15kでおめでとう:)
heemayl

1
@heemaylありがとう:D。正直、質問XDを保護するためだけにサイトを狂ったようにチェックしています
コス

0

で試してみましたawk、ここにawkバージョンがあります

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

0

AWKのもう1つのアプローチは、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 

そしてperl:

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、これらのコマンドの最後に追加するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.