回答:
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.txt
:line
to の内容を追加し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
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
、これらのコマンドの最後に追加するだけです。