解決済み

Linuxでのシェルプログラム

  • すぐに回答を!
  • 質問No.9507546
  • 閲覧数150
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 90% (40/44)

こんにちは。

以下のようなテキストファイルで、2行目から最後の行までを50byteになるように
末尾を半角スペース埋めしたいのですが、awkやsedなどでコマンド(?)を教えて
ください(>_<)

※半角スペースを「x」で表しています。↓

◆元のテキストファイル(Test.txt)
12345678901234567890123456789012345678901234567890[LF]
1あああxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]
2AAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]
3漢字漢字漢字xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]
4カナカナxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]
59999999xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]


◆成型後
12345678901234567890123456789012345678901234567890[LF]
1あああxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]
2AAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]
3漢字漢字漢字xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]
4カナカナxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]
59999999xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[LF]


よろしくお願いいたします!

質問者が選んだベストアンサー

  • 回答No.4

ベストアンサー率 67% (107/159)

> ということは"x"は50個書けばよいのでしょうか?

はいスペース文字50個です。

> また、 そのあとの「0,50」の意味をおしえていただけないでしょうか?

substr( [対象の文字列], [文字列の取り出し開始位置], [文字列の取り出す個数] )
という書式で対象文字列の一部を取り出します。単位はバイトです。
行から取り出した文字列の後ろに50文字のスペース文字を追加して全体が少なくとも50文字になるようにしたうえで、左(0)から50バイト分を取り出しています。
お礼コメント
kanayan0707

お礼率 90% (40/44)

ご丁寧にありがとうございます!内容理解いたしました。また、思った通りの編集ができました(T▽T)!!ありがとうございました。
投稿日時 - 2018-06-12 16:29:31
Be MORE 7・12 OK-チップでイイコトはじまる

その他の回答 (全3件)

  • 回答No.3

ベストアンサー率 67% (107/159)

> コマンド内のx(スペース)が44個なのは、なぜでしょうか?

すみません。単純な打ち間違えをしてしまいました。
回答記入時にスペースがWebサイト側で
スペース1個に置き換わってしまい、急遽xを追加したのですがその際に個数を間違えてしまったようです。
お礼コメント
kanayan0707

お礼率 90% (40/44)

ありがとうございます!ということは"x"は50個書けばよいのでしょうか?また、 そのあとの「0,50」の意味をおしえていただけないでしょうか?申し訳ありません。。
投稿日時 - 2018-06-12 13:29:13
  • 回答No.2

ベストアンサー率 67% (107/159)

環境変数をLANG=Cとし、マルチバイトとしての処理を抑止したうえで
置換コマンドを実行します。
(半角スペースを"x"で表しています。)

env LANG=C awk '{print substr( $0 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 50 )}' sjis.txt > sjis-out.txt
お礼コメント
kanayan0707

お礼率 90% (40/44)

ご回答ありがとうございます。

コマンド内のx(スペース)が44個なのは、なぜでしょうか?無知で申し訳ありませんが、教えてください。
投稿日時 - 2018-06-12 12:02:02
  • 回答No.1

ベストアンサー率 39% (2500/6290)

他カテゴリのカテゴリマスター
元と成型後の区別がつきませんが。

それと、漢字データを入れるとよろしくない。linuxでは注意してほしいんですが、文字コードでバイト数が違いますが、バイト数で数えようとすると期待通りになりませんので。

全角コードを入れないなら、非常に簡単な話で、awkだったらlengthで切ればいいだけです。
補足コメント
kanayan0707

お礼率 90% (40/44)

ご回答ありがとうございます。画面上はわかりづらいのですが、テキストエディタに張り付けると、成型後の末尾がそろっているかと思います。(成型後はすべて50byteになっています)

Linux上で、このテキストファイル自体はSJIS文字コードになっています。
恐れ入りますが、、、コマンドがわからないので教えていただけると幸いです。
投稿日時 - 2018-06-12 11:02:36
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
このQ&Aのテーマ

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ