sedを使って複数ファイルの先頭行を表示する方法
- sedコマンドを使って複数のファイルの先頭行を表示する方法を解説します。
- headコマンドの場合はファイル名と結果が分かれて表示されますが、sedコマンドを使用するとファイルごとに結果が表示されます。
- sedコマンドの-nオプションと行番号指定を組み合わせることで、各ファイルの先頭行を取得することができます。
- ベストアンサー
sedを使って複数ファイルの先頭行を表示
以下の様なファイルがあります。 各ファイルの先頭行をとりだしたいのですが、headコマンドを使うと ファイル名と結果が分かれて表示されます。 sedで、-nオプションの行番号指定で表示することができるので、 sed -n '1p' *.txt のワイルドカード指定でやったのですが、 この場合だと複数ファイルとみてくれなくて、すべてのファイルを ひとつにしてその先頭を表示しているみたいです。 できれば、各ファイル毎に、ファイル名と結果を1行にして表示したい のですが、どうすればよいでしょうか。 参照ファイル cat 1.txt 12345 67890 cat 2.txt abcde fghij cat 3.txt 11111 22222 headコマンドで実行 $ head -n 1 *.txt ==> 1.txt <== 12345 ==> 2.txt <== abcde ==> 3.txt <== 11111 sedで実行 $ sed -n '1p' *.txt 12345
- abc999xyz
- お礼率81% (170/208)
- その他(プログラミング・開発)
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
awk を使いましょう。 awk 'FNR==1{print FILENAME,$0}' *.txt
その他の回答 (3)
- kumoz
- ベストアンサー率64% (120/185)
sed でファイル名を取得できないと思いますので、No2 の回答のように AWK を使うか、別の言語を使うことになります。。なお、head の出力を sed で加工することはできます。 head -n 1 *.txt | sed 'N;$!N;s/==> \(.*\)<==\n/\1/;s/\n//' Perl では、次のようなコマンドラインになります。 perl -ne 'if ($. == 1) {print "$ARGV $_"; close ARGV;}' *.txt
お礼
ありがとうございます。 他のコマンドとの組み合わせか、他の方が書いていただいた通り awk、perlにするかですね。
- kumoz
- ベストアンサー率64% (120/185)
GNU sed だけかも知れませんが、ファイルを別々に処理する -s オプションがあります。 sed -sn '1p' *.txt
お礼
ありがとうございます。 -s があるなんて知りませんでした。 manやsed --help で調べていない自分がいけないのかも。 -s でやるとファイル名がでないんですね。
- memphis
- ベストアンサー率40% (975/2395)
headコマンドでできますよ。 head -q -n 1 *.txt
お礼
ありがとうございます。 -q があるなんて知りませんでした。 manで調べていない自分がいけないのかも。 -q でやるとファイル名がでないんですね。
関連するQ&A
- 多数あるファイル(text base)の*行目だけを引っ張ってきて標準出力させたい。
Unix初心者です。 SunOS > head -1 ./*.txt とすれば、以下のように1行目だけを引っ張ってきて標準出力させる事も可能ですが。 ==> 1234.txt <== hello ==> 1235.txt <== hello SunOS > head -2 ./*.txt とすると、1行目と2行目が標準出力されます。 ==> 1234.txt <== hello bye ==> 1235.txt <== hello bye ですが、以下に例をあげますが、このように " 2行目だけ " を標準出力させたいのです。 ==> 1234.txt <== bye ==> 1235.txt <== bye sed -n '2p' ./*.txt だと、理由は不明ですが一つのファイルしか標準出力されませんでした。 head 、sed でなくともawk grepでも構いません。 その他の自分の知らないコマンドで構いません。 文字検索ではなく、*行目と行数指定です。 できれば、ファイル名も同時に出力させたいのです。 欲を言えば、行数も出力させたいです。 更に、翌を言えば、指定行を増やせたら最高です。 例;)1行目と3行目を標準出力する。 scriptを作りこまずに、|(パイプ)でつなげれば一行のコマンドで処理可能なのでは ないかと想像してますが、いかがでしょうか。 宜しく頼みます。
- ベストアンサー
- Solaris系OS
- ○行目から□行目だけを表示するコマンド
テキストファイルの中から、10行目から20行目のみを表示するようなコマンドがあれば教えてください。 CATやMOREのようなコマンドにオプションで行数を指定して指定した行数だけを見ることは可能でしょうか? もしコマンドで一発で無理なら、hoge.txtというファイルの10行目から20行目までを表示するような簡単なシェルの書き方を教えてください。 よろしくお願いします。
- ベストアンサー
- Linux系OS
- SED スクリプトファイルを複数のファイルに作用させたい。
SEDのスクリプトファイル(henkan.sed)を作りました。 このスクリプトを実行させたい対象ファイルが15個あります。(temp01.txt~temp15.txt) > sed -f henkan.sed temp01.txt > kekka01.txt > sed -f henkan.sed temp02.txt > kekka02.txt ・ ・ ・ > sed -f henkan.sed temp15.txt > kekka15.txt これはあまりにもしんどいです。何かよい方法はあるでしょうか。 また、コマンドラインから一つのスクリプトファイルを複数の対象ファイルに作用させることは可能でしょうか。 よろしくお願いします。
- ベストアンサー
- その他(ソフトウェア)
- sedコマンドによる最終行の削除について
sedコマンドを使用してファイルの最終行を削除する方法を調べていたのですが 最終行の削除は問題なくできたのですが最終行から特定行までを消すため以下のコマンドを発行したのですがうまくいきませんでした。複数サイトを見てみたんですが構文自体は同じでしたのでおそらく問題ないとは思うですが何か気づく方がいたらお教えください。 以下実行コマンド sed -e '$-3,$d' sed_test.txt
- 締切済み
- Solaris系OS
- ファイル中の数行を抜き出す処理について(シェル)
ファイルaaa.txtの2行目から4行目を抜き出し、 ファイルbbb.txtに格納する方法として、 sed -n '2,4p' aaa.txt > bbb.txt がありますが、 変数を使用し、 start=2 end=4 sed -n '${start},${end}p' aaa.txt > bbb.txt とすると、エラーが発生します。 どうすればよろしいのでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- UNIX sedの使い方
教えてください。 UNIX のSed コマンドについてです。 [内容] テキストの中身を一行ずつ表示し、一行ずつ書き込みをしたい。 [ソース] #!/bin/sh i=1 while [ "$i" -le 10 ] do sed -n '${i}p' list.txt >> data.txt <--ここのsedの行数指定('${i}p')の使い方がわかりません。 i=`expr $i + 1` done 何方かご存知の方教えてくださいませ。
- ベストアンサー
- その他(プログラミング・開発)
- sedで特定文字が出たら次の行は読み飛ばす
Linuxのsedコマンドなのですが、特定文字列が出たら読み飛ばすという事をやっています。 例えば、'#SKIP'が出たら次の行(複数行)は読み飛ばすみたいな事をです。 行飛ばしで2点質問がありますのでお願いします。 以下の様なファイルがあります。 /---------- $ cat input.txt YYYY YYYY YYYY YYYY YYYY #SKIP YYYY YYYY YYYY YYYY YYYY -----------/ '#SKIP'が出たら次の行を読み飛ばすは、 $ sed '/#SKIP/{N; s/YYYY/2016/g}' input.txt YYYY YYYY YYYY YYYY YYYY #SKIP 2016 YYYY YYYY YYYY YYYY と、'#SKIP'の下の行が置換されます。 数行読み飛ばす場合は $ sed '/#SKIP/{N;N;N; s/YYYY/2016/g}' input.txt YYYY YYYY YYYY YYYY YYYY #SKIP 2016 2016 2016 YYYY YYYY と、'#SKIP'から下の3行が置換されます。 てっきり、'#SKIP'から指定した(N;)行分読み飛ばし、それ以降を置換すると 思っていたのですが違うのでしょうか。 使い方が間違っているのでしょうか。 また、同じ様な行飛ばしで、範囲指定した場合ですが、 $ sed -e '3,20n;n;n; s/YYYY/2016/g' input.txt や $ sed -e '3,20{n;n;n; s/YYYY/2016/g}' input.txt とした場合、範囲指定外の3~20以外でも置換されます。 3行目から置換されたり、20行目を越えても置換されます。 OS、バージョンによるものでしょか。 本記載の2点について教えて下さい。
- 締切済み
- Linux系OS
- 複数のファイルをsedで処理したいけど・・・
こんにちは。sedでテキストファイルの文字の変換をしています。でも、 001.txt 002.txt 003.txt のように同じ変換をしたいファイルが延々とあります(涙) sed -e 's/a/b/g' 001.txt > 001convert.txt のように一つずつやっているととても大変です。 なのでワイルドカードが使えるかなと sed -e 's/a/b/g' *.txt > *convert.txt とやったら「*convert.txt」というのが一つだけできてしまいました。 変です・・・。 正しくはどのようにコマンドを書けばいいのですか? 教えてください!!
- ベストアンサー
- Linux系OS
- sedでの改行置換
sedを用いた処理で質問があります。 出力結果の改行を置換して一列として表示しようとしているのですが、どうもうまくいきません。 (perlは敢えて使いません) 例えば、以下のようなファイルがあるとして、 $ cat hoge.txt hoge boo bar この出力結果を加工して、「hoge boo bar」のように、 改行をスペースに置換して一行として表示したい場合は、どのようにすれば良いでしょうか? ちなみに、以下のような使い方だと、うまくいきませんでした。 $ cat hoge.txt | sed 's/\ > / /g' $ cat hoge.txt | sed 's/\n/ /' ■実行環境 OS : RedHat EL 1 sedのバージョン : sed-4.0.7-3 宜しくお願い致します。
- ベストアンサー
- Linux系OS
- awk,sedの問題を教えて下さい。
1)以下のファイルを元にして aaa bbb ccc ddd eee ffff ggg hhh iiii 最初の欄だけとりだしてファイルにする方法は? 2)上記で元のファイルをベースにして1行コマンドで 下記の内容のファイルを作れ。 cat aaa > aaa.txt cat ddd > ddd.txt cat ggg > ggg.txt 3)以下のファイルに対してsedコマンドで file1 file2 file3 下のようなファイルを作成せよ cat file1 > /dev/null cat file2 > /dev/null cat file3 > /dev/null 上記3問宜しくお願い致します。
- 締切済み
- その他(ITシステム運用・管理)
お礼
ありがとうございます。 awkのことを忘れていました。