
作成している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
にはなってくれません。
こういった処理はどのようにすればいいのか誰か教えていただけないでしょうか?
No.4ベストアンサー
- 回答日時:
机上デバッグ開始!
> 作成しているawkスクリプトを実行すると
> ”aaa" "1111" "kkk"
> ”bbb" "2222" "jjj"
> という出力になってしまいます。
入力ファイルは Excel データのエクスポートかな?
.csv か、タブ区切りテキストと、あたりをつけてみる。
※ 文字列を『"』で囲むのはよくあるからね。
[input.csv](想像)
…,"aaa",…,"1111",…,"kkk",…
…,"bbb",…,"2222",…,"jjj",…
> printf(”%s %s %s\n"、 adata、 bdata、 cdata)
この adata, bdata, cdata は、処理したい内容をわかりやすくするために
| {
| adata=$フィールド番号A
| bdata=$フィールド番号B
| cdata=$フィールド番号C
としたのかな?
あっ、
> adataprint =gsub(”¥””、” ”、adata)
> bdataprint =gsub(”¥””、” ”、bdata)
> cdataprint =gsub(”¥””、” ”、cdata)
これだ!
http://linuxjm.sourceforge.jp/html/GNU_gawk/man1 …
| gsub(r, s [, t])
| …… 置換の個数を返します。……
個数保存しちゃってる。。。
さっきの部分をしたのように換えればできるとおもうよ!
| gsub("\"", " ", adata)
| gsub("\"", " ", bdata)
| gsub("\"", " ", cdata)
| print adata" "bdata" "cdata
ご指摘の通りに変更することでうまくいきました!
”…… 置換の個数を返します。……”はまさかでした。
適切なアドバイスありがとうございました。
No.3
- 回答日時:
私も、printfで""が勝手に付くawkなど聞いたことがありません。
そんなawkがあったら、参考のために教えていただきたいです。
普通に考えて、まず間違いなく、その前の段階でadata,bdata,cdataに""が含まれています。
""でくくってあるCSVファイルをFS=,で取り込もうとした、とかではないか、と予想されます
> としてみたのですが思ったような出力
> にはなってくれません
質問するなら、「思ったような出力」にならなかったのなら「どんな出力になったか」を書くようにしましょう。
awkのマニュアルでgsub関数の説明は読んだのですか?
gsubは指定した変数の中身を書き換えて、その書き換え回数を返します
> printf(”%s %s %s\n"、 adataprint、 bdataprint、 cdataprint)
としたら
2 2 2
と表示されたのでは?
No.2
- 回答日時:
これもNo1=質問者
のパターンでしょうか? 質問者がちゃんと情報を記載しないため、何か変ですよね?
普通最初の疑問は
adataなどの変数とはなんぞや、最初からその変数に””が設定されているでしょう。
と考えるはずなんですが・・・・
だとしたら、ちゃんと変数にデーターが格納されるところを記載するでしょう普通。そこがこの質問の変な所ですよね???
http://homepage2.nifty.com/mozu/koza/awk_koza/aw …
にもありますが、printf に””が付加されることはありません、昔からあるawkなら。
そもそもプラットフォームも記載されていない、バージョンも記載されていない。それでやり方を提示しろ?
変な質問。
ちゃんと回答がほしいなら、プラットフォーム、バージョン等を記載すべき。
普通の解決手順は、まず変数に格納されている値になぜ””が付加されるのか、格納前、格納後を、処理のステップごとに確認し、その箇所をただすべき。
つまり、変数に格納したら
print adata;
でもいいし、
printf("%s\n",adata);
でもいい。
どこで””が紛れ込んだか調べるのが最初。自分ですでにわかっているなら、最初から、
””を外すには?
と言うテーマで書くべき。
記載内容だとprintfの操作で設定されてしまったような記載だ。
記載内容は全角文字と半角文字がごちゃまぜだが、実際のスクリプトもそうなんでしょうか?
スクリプトの全文を記載すべきなんじゃないんですか?
もしAWKに渡す前にすでについているならSEDを使って置き換えた後 | で渡せばいいだけの話。

No.1
- 回答日時:
それって、printfのフォーマット指定子%sがダブルクォートを付けている犯人じゃないですか?だとしたら、単純にprintで表示させれば済みそうな気はします。
これでいけたら超簡単!(ただし処理系依存でうまくいかない可能性あり)print adata,bdata,cdata
どうしてもprintfによるフォーマット指定が必要なら、sprintfで結果を変数に出しておき、それに対してgsubで置換をかければいけると思います。
pdata=sprintf("%s %s %s",adata,bdata,cdata)
gsub(/"/,"",pdata)
print pdata
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- その他(プログラミング・Web制作) awkの BEGIN{RS=""} で空行を削除できるが、削除できる仕組みが分からない。 1 2023/05/02 14:14
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重複するデータを抽出できる秀...
-
[Perl]ファイル出力のエンコー...
-
awkスクリプトでダブルクォーテ...
-
SYSログ出力時の文字化けについて
-
PerlからのCSV出力
-
エクセルVBA コードが同じでも...
-
Windowsで複数のファイルを同じ...
-
fgets で値が取得できない
-
ReadLineでの読み出し行を指定する
-
MATLAB グローバル変数の宣言
-
配列の中に重複文字列があるか...
-
VBAでCSVファイルを途中行まで...
-
空白文字 \\f と\\v の違いに...
-
MATLABでのwhile文の条件について
-
vba dir の相対パス
-
無料配布の郵便番号自動入力cgi...
-
行を指定して削除する方法PERL
-
openした後、closeしないでプロ...
-
エラー 'dir.h' : No such fi...
-
perlのflock関数でロックをかけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複するデータを抽出できる秀...
-
awkスクリプトでダブルクォーテ...
-
sprintfについて
-
DOSコマンドで、標準出力を出力...
-
文字コードの変換(Shift-JISか...
-
Perl<->Oracle間での文字化けに...
-
[Perl]ファイル出力のエンコー...
-
エクセルVBAで素数だけを出力す...
-
データの選択
-
apacheの動作について
-
「print関数は出力先のファイル...
-
教えて!perlから.exeファイル...
-
ファイル出力の改行コードをLFに
-
PerlからのCSV出力
-
Active Perlでsleepを使う。
-
[awk]uniq -cで複数ファイルの...
-
バッチファイルで、記号を含む...
-
EUCで出力されるプログラムをS-...
-
htmlから、ファイル、もしくはC...
-
リファレンスについて。
おすすめ情報