• ベストアンサー
  • 困ってます

改行区切りのテキストを1行ずつ読み込むシェルを作りたい

awkにて改行区切りのテキストファイルを読み込みテキストファイルに記述されているファイルを別のフォルダへコピーしたいと考えております。 file1=コピー対象ファイル名が書かれたテキストファイル DIR1=コピー先ディレクトリ cat $file1 |gawk '{print "cp",$file1,$DIR1}'|sh 上記をシェルでで実行しようとすると下記のようなエラーで帰ってきてしまいます。 ⇒ cp: `****' と `****' は同じファイルです よい方法をご存知でしたらぜひ御教授いただけませんでしょうか。コピーが目的ですので別のコマンドでも結構です。

noname#200934

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数1470
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

>cat $file1 |gawk '{print "cp",$file1,$DIR1}'|sh gawk で処理した結果を sh に食わせないでファイルに落として中身を 確認してみて、期待通りのコマンドラインになってますか? gawkスクリプトの $file1 って、ファイルの名前そのものであって ファイル中に記述されている名前ではないんじゃないでしょうか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

色々試してみましたが結局下記のようなコマンドで 解決致しました。。 while read dir_name; do cp $dir_name DIR1; done < input.txt ご回答いただきましてありがとうございました。

関連するQ&A

  • system関数でCシェルコマンドを実行した時のエラー抑制

    CシェルコマンドをPerl上でsystem関数を使用し実行した時の、 エラーメッセージ抑制について教えてください。 ディレクトリ(DIR1をDIR2に)をコピーする際、 下記のようにしました。 system("cp -r DIR1 DIR2"); ここでもし、なんらかの原因でコピー失敗した場合、 「DIR1がありません。」などと、エラーメッセージが出力されます。 Cシェルでこの様なエラーメッセージを抑制するには cp -r DIR1 DIR2 >& /dev/null と、 することによって、エラーメッセージの抑制は可能になります。 これと、同じ事をPerlで行いたいと思っています。 ご回答よろしくお願いします

  • UNIXで、とあるテキストに対して2文字区切りで改行をいれるには?

    UNIXのシェルスクリプトで、このような動作ができないものかどうか考えています。 あるテキストファイルの内容を、2文字ごとに区切って改行を入れるように加工する 例えば file1.txt が以下のような内容であれば --file1.txt-- 000092 027301 01 0263000001 2文字ずつ区切って改行を挿入したファイル --file2.txt-- 00 00 92 02 73 01 01 02 63 00 00 01 を生成したいと思います。 ここで元のファイルは必ず、半角の数字のみで構成されており、 1行の文字数は最低2文字以上あり、なおかつ奇数個の文字列は存在しないものとします。 awk や grep や sed を組みあわせて考えているのですが、 なかなか解決に至りません。 どなたかお知恵を拝借願います。

  • ファイル内の改行を削除し1行にするシェル

    お世話になっております。 ファイル(テキスト)内には、改行を含んだ複数の行が記述されています。 これを1行にして上書き保存するシェルを実行をするための シェルを作成したいと思っています。 ファイル内には以下のような値が改行を含んで入っています。 123 456 789 →これを、「123456789」と改行を取り除き、既存のファイルの上書き保存をしたい なお、改行を含んだ対象のファイルは、ファイル名にある文字を含む ファイルのみに対して行いたいのですが。 例:ファイル名に、「*abc*」、「*def*」、「*xyz*」を含むファイルが対象 改行を取り除くコマンドはわかるのですが、シェルにするプロセスがわかりません。 cat 入力ファイル名 | tr -d '\n' > 変換後の出力ファイル名 ご教授いただきたく、よろしくお願いします。

  • コマンドプロンプトでのワイルドカードによるコピー

    こんにちは、よろしくお願い致します。 コマンドプロンプトにおいて Dirというディレクトリの下に、Dir1、Dir2、・・・DirNのようにN個のディレクトリがあったとします。 この時Dir1、Dir2、・・・DirNの直下にあるすべてのファイルだけ、つまり Dir\Dir1\* Dir\Dir2\* ・・・ Dir\DirN\* を、一気にカレントディレクトリにコピーしようとして cp Dir\*\* . としても、上手くいきませんでした。 (Dir1などのディレクトリごとをコピーをするのではない) どうやら、ディレクトリの名前にワイルドカードを使うことができないようでした。 何かいい方法はありませんでしょうか?

  • Kシェルにて区切り文字の抽出について質問です。

    空白区切りの最後の文字を抜き出したいのですが うまくいきません。 どのような構文にすればよいのでしょうか? cat file.txt | awk -F "" '{print (分からない。。)} 行末は $ だと思い、使用してもダメなのです。。。

  • スペース区切りのテキストファイルをExcelで開く

    テキストファイルをExcelファイルとして読み込む必要が多いです 毎回Excelの 開く を使ってテキストファイルを開くのは面倒なので、右クリックの 送る にExcelの実行ファイルをコピーしてそこに送っています ただ、この方式だとスペース区切りで改列出来ず、タブと改行(エンターキー)のみ反映したファイルが開きます 最初からスペース区切りも列区切りにした形でテキストファイルを開く方法(Excelの 開く を使わずに)はないでしょうか

  • linuxでディレクトリをコピーしようとするとomitting directoryというエラー

    linuxでディレクトリをコピーしようとするとomitting directoryというエラーが出てコピーできません。 root@aaaaa# cp -p /home/dir1/ /home/dir2 cp: omitting directory `/home/dir1/' ちなみにこのディレクトリのパーミッションはdrwxr-xr-xです。 なんでしょうかこれは?

  • Cシェルでエラーハンドリングする方法について

    Cシェルでエラーハンドリングする方法について 特定のファイルをしたのディレクトリに移動させる際、特定ファイルがなければ、処理を終了するという記述の仕方を教えていただきたいです。 すでに、以下のように記述をしてファイルを指定したディレクトリへ移動する動作確認はできています。 ------------------------------------------ set dir1=/export/home/username/test1_dir set dir2=/export/home/username/test2_dir mv ${dir1}/*.log /export/home/username/mv_dir mv ${dir2}/*.csv /export/home/username/mv_dir ------------------------------------------ この場合、*.log、*csvがディレクトリ内に存在すれば、移動先ディレクトリへ移動し ファイルがなければそのまま終了しています。 ファイルがなかったとしても、シェルが実行中のまま終わらなかったり エラーがでてしまうことはありませんでしたが、 念のため、ファイルが存在しない場合、何もせず処理を終了する というエラーハンドリング処理を入れたいと思うのですが、 どのように記述したらよいでしょうか? if (条件式) コマンド行 で実施ができるのか?と思うのですが どのような記述となりますでしょうか。

  • linuxでディレクトリだけを表示させる方法

    あるディレクトリに以下のファイルとディレクトリがあった場合に dir1/ dir2/ file1 file2 lsだけだとすべて表示されるので、ファイルだけ表示やフォルダだけ表示させたいのですが可能でしょうか? フォルダだけ表示の場合 dir1/ dir2/だけ表示させたいのですが方法がわかりません。 よろしくお願いします。

  • 呼び出し先にさらに呼び出しがある場合について

    PHPバージョン5.2.4を使っています。 index.phpからdir1ディレクトリにあるfile1.phpをrequireして使いたいのですが、 file1.phpもdir1ディレクトリにあるfile2.phpをrequireしているので 次のような呼び出し方ならうまく作動するのですが、 [index.php] define('DIR', realpath(dirname(__FILE__))); require_once 'dir1/file1.php'; [dir1/file1.php] require_once DIR.'/file1.php'; [dir1/file2.php] print "file2表示"; 次のようにindex.phpをdir1ディレクトリに移動させて実行すると file1.phpのrequireでエラーが出てしまいます。 [dir1/index.php] define('DIR', realpath(dirname(__FILE__))); require_once 'dir1/file1.php'; このような呼び出し先の中にさらに別の呼び出しがある場合は どのように記述すればindex.php(実行するファイル)を 別のどんな場所に移動させても作動させることができるのでしょうか?

    • ベストアンサー
    • PHP