• ベストアンサー

awk と gawk の書き方の違い

Fushinoの回答

  • ベストアンサー
  • Fushino
  • ベストアンサー率59% (329/550)
回答No.1

>やっぱりawkのような書き方では上手く実行できないみたいです。 エラー箇所と内容を返してくると思いますが具体的にどういう状況でしょうか。 単純に引用符の問題だけのように思えますが↓でどうでしょう。 ※一部単純な誤記と思われる部分(\→\\、n→\n)も変更しました。 gawk -F, "{printf(\"copy aaa\\%s bbb\\%s\n\",$0,$0)}" list.txt

kariyu1231
質問者

お礼

本当でした。\を付けると上手くながれました。 printf(のあとの"にも\がいるとは思いませんでした。 有難うございました。

関連するQ&A

  • unixのawkについて

    unixでawkを使ってフルパスからディレクトリとファイル名に分けようと しているのですが、上手くいきません。 例えば ①/aaa/bbb/ccc ②/111/222/333/hoge.txt ③/hoge/foo/bar/dk@0:1 を ①/aaa/bbb と ccc ②/111/222/333 と hoge.txt ③/hoge/foo/bar と dk@0:1 としたいのです。 echo "/111/222/333/hoge.txt" | gawk '{sub(/\/.*$/,"",$0); print}' としてみたのですが、 ディレクトリだけを取り出そうとしたのですが上手くいきません。 よろしくお願いします。 OSは、Solaris、Linuxになります。

  • 今、awkを使ったシェルスクリプトを作っています。

    今、awkを使ったシェルスクリプトを作っています。 aaa bbb ccc ddd ee ff gggg hhh といったファイルから、 bbb,ccc ff,gggg を取り出したいと思っています。 そこで、以下のコマンドをwhileでまわして、$iを増加させることにより、 ファイルを一行ずつ読み取り、目的の列を取り出したく思っています。 A=`cat sample.txt|awk 'NR == $i {print NR, $2;}'` B=`cat sample.txt|awk 'NR == $i {print NR, $3;}'` ところが、awkコマンドの中の$iがシングルクォーテーションでくくられているので、 変数展開されなくて困っています。 何かよい方法があればご教授いただけますでしょうか?

  • awkのセパレータ指定について

    awkのセパレータ指定について教えてください。 以下のようなファイルがありそれを'||'区切りで出力したいです。 下記のような指定をしてみたのですが、 うまくいきませんでした。 cat text | awk -F '||' '{print $1}' [test.txt] aaa||bbb||ccc [期待する結果] print $1 → aaa print $2 → bbb print $3 → ccc どなたか教えてください。 よろしくお願いします。

  • DOSコマンド(COPYコマンド)について

    DOS上でのCOPYコマンドについて確認します。 EXCELのファイルで、毎回ファイル名が変わるため、COPYコマンドで固定のファイル名にしようと思い、バッチ起動で、COPY \AAA\*.XLS \AAA\BBB.XLSで実行すると、コピー元と違うファイルサイズのBBB.XLSが作成されます。 中身を参照すると、文字化けしたものが 1レコードだけ作成されています。どうしてなのでしょうか? ※コピー元の*.XLSは、毎回 1ファイルのみです。

  • awkで¥をエスケープする方法

    awkで以下のように文字列置換したいのですが、変数strA内で¥マークを使用すると正常に置換してくれません。どのようにエスケープすれば良いのでしょうか? ================================================= --実行コマンド---------- gawk -f CNV.awk input.txt --input.txt---------------- いぬ¥ねこ --CNV.awk---------------- strA="ぬ¥ね"; strB="★"; gsub(strA, strB, $0); print $0; ================================================= このとき、「い★こ」という結果を期待しているのですが出力がありません。 また、 strA="ぬ¥¥ね"; や strA='ぬ¥ね'; と指定しても同様にダメでした。 どなたか解決策をご存知でしたらご教授宜しくお願い致します。

    • ベストアンサー
    • Ruby
  • gawk複数ファイルを同ファイル名でフォーマットする方法

    gawk複数ファイルを同ファイル名でフォーマットする方法 gawkを使いcsv形式のファイルをjson形式のファイルにフォーマットしようと考えています。 簡単に説明しますと、 ●csvファイル test1.csv test2.csv test3.csv ↓↓↓↓ ●jsonファイル xxx-test1.json xxx-test2.json xxx-test3.json という風にフォーマットさせたいのです。 現在、 jsonファイル出力後の記述を ●aaa.awk BEGIN { FS = ","; printf("{"); } { printf("%s,%s,%s,%s", $1,$3,$4,$5); printf("],"); } END { printf("}"); } このようにし ●コマンドライン gawk -f aaa.awk test1.csv > xxx-test1.json これで一ファイルずつのフォーマットはできたのですが、 ファイル数が複数あり面倒なため、一気にフォーマットしたいのです。 その方法をご教授お願い致します。

  • awkスクリプトでダブルクォーテーションの削除

    作成しているawkスクリプトを実行すると ”aaa" "1111" "kkk" ”bbb" "2222" "jjj" という出力になってしまいます。 ダルルクォーテーションを削除したかったので printf(”%s %s %s\n"、 adata、 bdata、 cdata)        ↓ adataprint =gsub(”¥””、” ”、adata) bdataprint =gsub(”¥””、” ”、bdata) cdataprint =gsub(”¥””、” ”、cdata) printf(”%s %s %s\n"、 adataprint、 bdataprint、 cdataprint) としてみたのですが思ったような出力 aaa 1111 kkk bbb 2222 jjj にはなってくれません。 こういった処理はどのようにすればいいのか誰か教えていただけないでしょうか?

  • DOSコマンド COPY(複数ファイルをまとめる)

    DOSコマンドで、複数ファイルをまとめるのに COPYコマンドを使用しています。 まとめたファイル上にコメント文を加えたいのですが どうすればできるのでしょうか? 下記は、a.txtとb.txtをまとめて、c.txtにしています。 copy a.txt + b.txt c.txt だと、 そのままデータがつながってしまい、コメント文を 入れることができません。 [a.txt] aaa [b.txt] bbb  ↓ [c.txt] "Input A.txt" aaa "Input B.txt" bbb

  • awkで、キーボードからファイルを指定するには

    私は、awkプログラムを始めたばかりの初心者です。 データファイルがfile1、file2、file3とあって、どのファイルを実行させたいかをキーボードから入力させるには、どのようにすればよいのでしょうか。 次のようなプログラムを作ったのですが、うまくいきません。 { printf "ファイル名?" > "/dev/stderr"#画面表示 getline < "/dev/stdin" #数字入力 aaa = $0 #aaaに代入 } { getline < ("file"aaa".txt") #ファイル入力 print $0 #レコードを出力 } これを、バッジファイルで次のように実行をかけて、「結果.txt」に出力する。 jgawk -f prog.awk con > 結果.txt すると、コマンド画面が消えず、エラーとなってしまいます。 バッジファイルに問題があるのでしょうか。 「-f」の後には、プログラム名、データ名>出力ファイル名 とやるようですが、この場合、データ名が決まっていないわけで、キーボード入力したいのだから、「con」でいいのでしょうか。 プログラムを実行させるのに、ほかに良い方法があるのでしょうか。

  • コピー元が固定パスでない場合のxcopyコマンドの書き方

    xcopyコマンドをバッチファイルで実行するのですが、 固定パスの場合は、 xcopy c:\aaa\bbb.txt c:\ccc (c:\aaaフォルダ内のbbb.txtをc:\ccc) と書けばよいと思うのですが、 コピー元が固定のパスではない場合はどうやって書けば良いのでしょうか? やりたいことは、 dddと言うフォルダの中にバッチファイルとeeeフォルダが あり、eeeフォルダの中にコピーしたいもの(fff.txt)が入っています。コピー先は固定でc:\gggの場合 dddと言うフォルダは何処にあっても可能な場合です。 win2000とwin98で書き方が違う場合は両方お願い致します。 よろしくお願いいたします。