- 締切済み
awkについて
UNIXのawkコマンドにて、レコードを抜き出したいのですが、その時抜き出した各レコード毎に改行 をいれたいのですが、下記のような定義で問題ないでしょうか? awk -f PGMファイル 元データファイル > 抜き出したデータファイル PGMファイル は下記です。 BEGIN{ORS=\"\\n\"} ←改行でいいんでしょうか? { if(substr($0, 5, 1) == \"1\"){ if(substr($0, 6, 2) == \"2\"){ print substr($0, 1,138) } } }
- MASANORI9
- お礼率4% (2/41)
- その他(プログラミング・開発)
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- sakusaker7
- ベストアンサー率62% (800/1280)
ORSはほっといても改行(\n)ですけど。 >BEGIN{ORS=\"\\n\"} 仮にこういう形で設定したいのなら ORS="\n" でOKです。 if(substr($0, 5, 1) == \"1\"){ if(substr($0, 6, 2) == \"2\"){ これ、素直に == 1 とか == 2で問題ないんじゃあ?
関連するQ&A
- awkのBEGINについて
awkのBIGIN内で、データファイルの途中のレコード情報を取得することは可能でしょうか? 以下が行いたい詳細です。 下記例のテキストファイルの”DATE”行をawkスクリプトファイルのBEGIN内で取得したい。 例:test.txt 11111 22222 33333 DATE=20040706 44444 よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- awkについて
度々すみません。awkについて先程教えて頂いたものですが、少し変更しようと思っているのですが上手くいきません。変更していることは、以下の○○○の内容を固定ではなくてコマンドラインから渡したいです。 ウェブで調べたところARGVというのを使うことはわかりました。そこで"○○○"からARGV[0]に変更してコマンド実行時に引数を与えたのですが、「○○○というファイルを開けません」というエラーになってしまいます。実行したのはawk -f awk data.csv ○○○です。なぜ引数をファイル名だと認識してしまうのでしょうか。初歩的で申し訳ありませんが教えて下さい。 BEGIN{ goukei = 0 count = 0 } { #フィールドの8番目の条件が一致する場合のみ9番目を合計 if($8=="○○○"){ goukei += $9 count++ } } END{ if(count!=0){ print "合計は", goukei print "平均は", goukei/count } else{ print "条件に一致するのない” } }
- ベストアンサー
- その他(プログラミング・開発)
- awk と gawk の書き方の違い
PCでAWKコマンドを使いたくてgawkを使ってみたのですが、 やっぱりawkのような書き方では上手く実行できないみたいです。 gawkのバージョンは v3.1.6です。 コマンド (awk) awk -F, '{printf("copy aaa\%s bbb\%sn",$0,$0)}' list.txt 単純にDOSのバッチをファイルから作りたいだけなのですが・・・gawkではどのように書けば良いのか教えてください。お願いします。 仕事でUNIXを使っていたのですがPCに移行するという話がでていて、今までのunixコマンドをPCで動くようにソースを書き直して行かなくてはならないのにパスを『/』から『\』にしただけでは全く動きませんでした。やっぱりUNIXのawkでは出来てPCのgawkでは出来ないこともあるのでしょうか?それとも書き方の問題でしょうか??
- ベストアンサー
- その他(プログラミング・開発)
- UNIX awkコマンド
シェルスクリプトで、awkをつかって計算を行いたいのですが、 例えば、 file1 5040 というものが入っていたとして、 1列目の5と3列目の4を抽出して 5-4をさせて、 新しいファイルに、1という結果を保存したい場合、 どのようにしたらよいのでしょうか?? awk '{printf("%s\n",substr(0,1-3,1))} file1 > newfile でできると思ったのですができませんでした。 わかる方いましたら教えてください。
- ベストアンサー
- その他([技術者向] コンピューター)
- awk の使い方
sample.txt ファイルには "中村" "08/01/80" "03.1234.5678" "木村" "08/01/81" "06.1252.2536" のような情報があります。 そこの3番フィールドが電話番号ですので、awkで検索しようと思っています。 それで、 awk -v ARGU="$NUM" ' { VAR=substr($3,2,(length($3)-2)) if ( ARGU == VAR ) {print} }' /sample.txt のようにして、検索をかけようとしましたが、できません。 どこが間違っているのか教えてください。 awkの他の方法があるとか、違うもの(sed or grep)でできるのであれば、お願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- awkで計算した結果を反映させる方法
初心者です。おしえてください。 awkで次のようなことをするにはどうすればよいでしょうか? コーディング例を教えてください。 テキストファイルのレコードの一部が数値項目で、 その数値項目から3を引いた結果をその数値項目に置換えたいです。 (区切り文字がない1レコードのみが入ったテキストファイルを読み込みます。) 例) aaaaa10000bbbbb20000 6~10カラムの「10000」から-3をした「9997」を置き換えて、 aaaaa09997bbbbb20000 としたいです。 awkで無くても、Unix(HP-UX)のコマンドやBシェルで可能であれば、 構わないのでおしえてください。 よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- awkで改行を除いて文字列を抜きだす
こんにちは。 UNIXユーザーです。 awkでテキストファイルから行、列を指定して、文字列を抜き出し、それをシェルで変数として定義したいのですが、各行の最終列(最も右の列です)を指定すると、抜き出した文字列の末尾に’^M’がついてしまいます。 これが改行を意味するということは分かったのですが、これを取り除くためにはどうしたらよいでしょうか?? どなた様かご教授ください。 よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- awk の使い方
sample.txt ファイルには "中村" "08/01/80" "03.1234.5678" "木村" "08/01/81" "06.1252.2536" のような情報があります。(フィールドの区別はTabです) そこの3番フィールドが電話番号ですので、awkで検索しようと思っています。 それで、 $ shell 06.1252.2536 #!/bin/sh NUM=$1 #引数をNUMに代入 awk -v ARGU="$NUM" ' { VAR=substr($3,2,(length($3)-2)) #「"」を取り除いた if ( ARGU == VAR ) {print} #電話番号と比較 }' /sample.txt のようにして、検索をかけようとしましたが、できません。 どこが間違っているのか教えてください。 awkの他の方法があるとか、違うもの(sed or grep)でできるのであれば、お願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- awk詳しい方へ
あるファイルの最終行のみ、他の行と出力形式を変えたいのですが awkとNRを使ってスマートにできないでしょうか? 詳しい方ご教授お願いします。 不細工に作ると(ファイル名xxxのとき) nnn=`wc -l xxx | awk '{print $1}'` awk '{ if (NR != $nnn) printf("%s %s \n",$1,$2) else printf("%s %s \n",$3,$4) }' aaa こんな感じでしょうか。 なんか、一行とかでかけないでしょうか?
- ベストアンサー
- Solaris系OS
- awkコマンドについて
教えてください。 Solaris9を使用しています。 SYSTEM Vでawkコマンドを使用しているシェルをSolaris9上で実行すると awk: レコード `従業員番号 従業員氏名 ...' においてフィールド指定が多すぎます。 のMSGが表示されてしまいます。 Solaris9では、1レコードの長さやフィールド数に制限があるのでしょうか? 行っている処理はテキストファイルのタブをカンマに変換です。 SYSTEM V上では正常に動作します。 よろしくお願いします。
- 締切済み
- Solaris系OS
補足
ありがとうございます。 下記にてテストしてみます。 BEGIN{ORS="\n"} { if(substr($0, 5, 1) == "1"){ if(substr($0, 6, 2) == "2"){ print substr($0, 1,138) } } }