質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

1回答

4611閲覧

BashのAWKコマンドで、複数個の空白文字を扱い、出力したい

tyosk

総合スコア2

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2021/09/18 07:00

編集2021/09/18 07:04

前提・実現したいこと

bashのawkコマンドで、カンマ区切りのデータを解析したいのですが、以下のポイント困っております。
・awkで解析したデータの一部が空白文字複数が許容されているのですが「  」
awkで解析し、printすると、空白1文字となってしまいます。

・コマンド
$echo test1,test2, ,test4 | awk -F, '{print $1","$2","$3","$4}'

・実行結果
test1,test2, ,test4

・想定(期待)結果
test1,test2, ,test4

空白複数については、そのまま複数で出力したいのですが、どのように実現すれば良いのかわからず
アドバイスいただけませんでしょうか。

色々試したこと

echo であれば、変数をダブルクォートで括ることで、複数空白を出力できることを知りました。
$ export arg=" "
$ echo "|"$arg"|"
| |
$ echo "|""$arg""|"
| |

ただし、awkで変数を括ってしまうと、文字列として扱ってしまいます。
$ echo test1,test2, ,test4 | awk -F, '{print "$1"",""$2"",""$3"",""$4"}'
$1,$2,$3,$4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

awkの問題ではなく、echoの段階で空白1文字になってしまっています。
これはお使いのシェルが引数区切りの空白の連続を1文字にまとめてしまうためです。
クォーテーション(「"」または「'」)で囲めばこれを回避できます。

$ echo test1,test2, ,test4 test1,test2, ,test4 $ echo "test1,test2, ,test4" test1,test2, ,test4

echoの側を修正すれば意図通り表示されると思います。

$ echo "test1,test2, ,test4" | awk -F, '{print $1","$2","$3","$4}' test1,test2, ,test4

問題点を提示するためにechoを使用しているだけで実際の処理は違うのかもしれませんが、
少なくとも上記の例ではawkは複数の空白を1文字にまとめること無く処理できています。

投稿2021/09/18 08:30

編集2021/09/18 08:55
hidezzz

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyosk

2021/09/18 11:51

ありがとうございます! 上記のやり方で、実現することが出来ました!ありがとうございます! 実態は確かに少し異なり、echoする文字列が変数で渡ってきます。 その場合も、ご解答頂いたとおり、クォートで括ることで解決できました。 echo "$arg" | awk -F, '{print $1","$2","$3","$4}'
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問