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

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

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

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

AWK

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

Q&A

解決済

1回答

4290閲覧

AWKにおけるprintfで指定幅を超過した文字の切り捨てについて

nikori

総合スコア19

bash

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

AWK

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

0グッド

0クリップ

投稿2016/12/26 14:51

AWK(GNU Awk 3.1.7)でprintfを利用する際、以下のコードでは、doneの上の行で変数userが8文字を超える場合フォーマットが崩れてしまいました。

bash

1#!/bin/bash 2cat somefile.txt | while read i 3do 4 id=$(echo $i | awk '{print $1}') 5 user="foo"$id 6 echo $i | awk -v name="$user" '{printf("%-8s%-8s\n",name,$2)}' 7done

somefile.txtを以下のようにした場合、出力が下のようになります。

12 state1 123 state2 12345 state3 12345678 state4
foo12 state1 foo123 state2 foo12345state3 foo12345678state4

これを$userの中身が8文字を超過した場合9文字目以降を表示しないようにしたいです。完全な素人の質問で恐縮ですが、方策をお教えいただけると幸いです。

*cat somefile.txtと、user="foo"$idは、本来は関数の出力結果ですが簡略化しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

%-8.8sで。

投稿2016/12/26 15:14

otn

総合スコア84499

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

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

nikori

2016/12/28 06:12

非常に基本的な問題だったようですね、ありがとうございました
otn

2016/12/28 06:37

printf書式は各言語で拡張されていたりしますが、基本的な部分は、man 3 printf に書いてあります。
nikori

2017/01/05 04:37

正月休みで返信が遅くなりました。manにも書いてあったのですね... manの使い方からじっくりと学んでみようと思います。重ねてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問