- ベストアンサー
シェルでファイルの最下行を削除する方法
シェルでファイルの最下行を削除する方法 シェルで、ファイルaaa.txtの最下行を削除したいです。これを1行で実現したいです。 exには-cってオプションがあるので、ex -c '$d' aaa.txt などと試してみましたがダメでした。 ;(コロン)や&&でつなぐのは、1行ではないって事でお願いします。 >cp aaa.txt tmp && sed '$d' tmp >aaa && rm tmp #こういうのは無しって意味です。 事前にスクリプトや、それ専用のバイナリを用意しておくのも無しでお願いします。なるべく汎用的な どこのUNIXにでもあるようなコマンドで実現したいです。
- 小林 K太郎(@kingfruits)
- お礼率66% (211/319)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
パイプが良いのかどうか書いてないなと思ったのですが、 >ターミナルにその1行をコピペするだけにしたかったんです。でもってそこはrootで且つrootにsuできない環境でして、全部sudoで作業してもらおうと思ってまして。 と言うことであれば、 echo '1,$-1wq' | sudo ed aaa.txt 質問は、やりたいこと(直面している問題)をストレートに書いた方が良いですよ。
その他の回答 (1)
- SaKaKashi
- ベストアンサー率24% (755/3136)
なぜ1行でないと駄目なのか? そう言う課題なのですか? その制約がなぜあるのかがさっぱり理解できませんね。 ま、wcとheadを組み合わせれば出来るとおもうけど。
補足
SaKaKashiさん、ご回答ありがとうございます。 >なぜ1行でないと駄目なのか? 人にお願いしてオペレーションをしてもらいたい境遇でして。 とあるファイルの最下行を消すにあたって、なるべく説明を少なくしたかったんです。 ターミナルにその1行をコピペするだけにしたかったんです。でもってそこはrootで 且つrootにsuできない環境でして、全部sudoで作業してもらおうと思ってまして。 で、考えてみたら案外とイイのが浮かばなくてですね。今一度よく考えると;や&&でつながないでってのは、目的から言うと不要な縛りでした。突っ込まれて気がつきました。 >そう言う課題なのですか? 課題といいますか、「できるかな?」と疑問に思いまして。 >ま、wcとheadを組み合わせれば出来るとおもうけど。 >head -n `wc -l aaa.txt|awk '{print $1 -1}'` aaa.txt wcとheadの組み合わせですと、こんな感じですかねぇ。しかし、これを元のファイルaaa.txtに反映させるには、やっぱし;や&&でつながないとダメですかね。しかも一時ファイルを使わないと無理ですかねぇ。一時ファイルって、超個人的趣味なんですけど、嫌いなんですよね。
関連するQ&A
- Cシェルでテキストファイルの行削除方法
現在、Cシェルの勉強をしていますが、ある文言に完全一致した行のみ削除する方法が分かりません。 例として、下記のようなファイルがあり、"AAA"を指定して削除しようとすると、"AAA_1"までも削除されてしまいます。 例)test.txt AAA aaa AAA_1 aaa BBB bbb CCC ccc お手数ですがご教授いただけると幸いです。 以上、宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- ファイル中の数行を抜き出す処理について(シェル)
ファイル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 とすると、エラーが発生します。 どうすればよろしいのでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- ある単語を含む行と、1つ前の行とを削除するシェル
UNIX初心者です。 シェル(Korn)で、あるファイル中に、単語 "iwa"を含んだら、その行と、1つ前の行とを削除したいシェルを作りたいのです。 つまり、grep, sed, awk などで、"iwa"を含む行がみつかったら、その行(iwaを含む行)と、なおかつ、1行前の合わせて、2行を削除するシェルを作りたいのですが、行番号(NR?)などを使うのでしょうか? よろしく、お願いします。
- ベストアンサー
- その他(プログラミング・開発)
- sed,awkでのデータ抽出方法
教えてください。 awk,sed,シェルを使い、カンマ区切りのファイルの1カラム目と2カラム目をキーに、 あるファイルに含まれる行を削除するにはどうすればよいのでしょうか? 例) --aaa.csv-- 111,222,333,444 555,666,777,888 999,000,111,222 --file1.txt-- 111222 555666 の場合、aaa.csvより下記行のみほしい。 999,000,111,222 ご存知でしたら、ご教授ください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- CentOS bashシェルの表記意味
下記のようなbashシェルの表記が理解できません。 ______________ #!/bin/bash clmline=8 file=testfile2 tmp='temp.txt' sed -e "${clmline},\$d" ${file} ______________ linuxを勉強中の初心者です。 会社にあるシェルを理解する為に、自宅にてテストで作成しています。 sed -e"1,2d" ファイル名 でファイル名の1~2行目を削除する意味と思われますが、 『 ${ } 』 としている意味、及び『 \$d 』の意味が理解できません。 そして、自宅のcentosでは『 \ 』が『バックスラッシュ』となり入力できません。 キーボード設定は下記となります。 $ cat keyboard KEYBOARDTYPE="pc" KEYTABLE="jp106" ご教授よろしくお願いいたします。
- ベストアンサー
- その他(インターネット・Webサービス)
- Bシェルで配列を使いたいのですが・・・
下記のBシェルファイルで、あるテキストファイルの内容を1行ずつ読み込んで、その行を変数に代入し、後続にてその変数を表示するという処理を実現したいのですが、うまくいきません。 どのようにすればうまく行くのかまた、何故うまくいかなかったのかをご教授頂ければと思っております。 宜しくお願い致します。 <Bシェルファイル> #!/bin/sh exec 3<&0 < TBL.txt count=0 while read line do ex$count=$line count=`expr $count + 1` done exec 0<&3 3<&- echo ${ex[1]} exit 0 <結果> aho.sh: ex0=A コマンドが見つかりません。 aho.sh: ex1=B コマンドが見つかりません。 aho.sh: ex2=C コマンドが見つかりません。 aho.sh: 置換が正しくありません
- ベストアンサー
- その他(プログラミング・開発)
- シェルスクリプトで複数ファイルを交互に操作する方法
Bシェルのスクリプトで複数のファイルを交互に操作したいと考えています。 例えば、 A.txt A A B.txt B B という2つのファイルがあったとして、これを交互に読み取り、 C.txt A B A B というファイルを作成したいと考えています。 現在は1行ごとに別ファイルを作成し、最後にそれをマージするという変な方法をとっています。 awkやperlを使用しないで、純粋にBシェルのスクリプトだけでスマートに実現するにはどのような方法がありますでしょうか。 よろしくお願いします。
- 締切済み
- Linux系OS
- ★Bシェルのファイルマージについて
★Bシェルのファイルマージについて 「ファイルA」の一部項目と「ファイルB」の全ての項目を結合し「ファイルC」を 作成するプログラムをBシェルで作成したいのですが、方法がわかりませんので、 どなたかご教授頂けませんでしょうか。 ファイルA.txt 20100904 0 aaa bbb ファイルB.txt ccc 1111 2222 3333 ddd 1111 2222 3333 eee 1111 2222 3333 ファイルA.txtの「20100904 0」をファイルB.txtの各行の先頭に 結合しファイルC.txtを作成する。 ファイルC.txt 20100904 0 ccc 1111 2222 3333 20100904 0 ddd 1111 2222 3333 20100904 0 eee 1111 2222 3333 以上、よろしくお願い致します
- ベストアンサー
- その他(プログラミング・開発)
- シェルでファイルから1行づつ読み出す。
ファイルから1行づつ読み込んで 変数に格納する方法がわかりません。 具体的に言うと・・・ ユーザIDが詰まった(1行に一人分)ファイル user.txt を1行づつ読みこんでいき、 ユーザアカウントをチェックするプログラム user_chk に引数として渡して行きたいと思っています。 簡単だと思っていたのですが、 さっぱりわかりません。 Cシェルを使用していますが、 Bシェルでもかまいません。
- ベストアンサー
- その他(プログラミング・開発)
- シェルでファイルを読み込む
csh を使っています。 ファイル hoge には1行に一つずつファイルの / からのパスが記されています。 hoge から 1行ずつファイルパスのリスト読み込んでそのファイルについて ls -al を行なった結果をファイル foo に保存したいのですが、どのようなシェルプログラムを作れば宜しいでしょうか? awk/sed も使える環境ですので、これらを使ったスクリプトでも構いません。 非常に初歩的な質問で申し訳ありませんが、宜しくお願いします。
- ベストアンサー
- その他(OS)
お礼
notnotさん、ご回答ありがとうございました。