こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

Linuxでのシェルプログラム

こんにちは。

以下のようなテキストファイルで、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]


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

投稿日時 - 2018-06-12 09:21:09

QNo.9507546

すぐに回答ほしいです

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

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

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

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

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

投稿日時 - 2018-06-12 14:07:29

お礼

ご丁寧にありがとうございます!内容理解いたしました。また、思った通りの編集ができました(T▽T)!!ありがとうございました。

投稿日時 - 2018-06-12 16:29:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.3

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

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

投稿日時 - 2018-06-12 12:53:28

お礼

ありがとうございます!ということは"x"は50個書けばよいのでしょうか?また、 そのあとの「0,50」の意味をおしえていただけないでしょうか?申し訳ありません。。

投稿日時 - 2018-06-12 13:29:13

ANo.2

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

env LANG=C awk '{print substr( $0 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 0, 50 )}' sjis.txt > sjis-out.txt

投稿日時 - 2018-06-12 11:57:47

お礼

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

コマンド内のx(スペース)が44個なのは、なぜでしょうか?無知で申し訳ありませんが、教えてください。

投稿日時 - 2018-06-12 12:02:02

ANo.1

元と成型後の区別がつきませんが。

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

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

投稿日時 - 2018-06-12 10:49:19

補足

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

Linux上で、このテキストファイル自体はSJIS文字コードになっています。
恐れ入りますが、、、コマンドがわからないので教えていただけると幸いです。

投稿日時 - 2018-06-12 11:02:36

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-