シェルで改行コードなしファイルの特定の位置に固定値を付加したいです。
どのようなコマンドで実行すれば実現できますでしょうか?
入力ファイルは固定長改行なしです。
ファイル名を変更せずに追記のみしたい(不可能であれば新たにファイル作成でも)
LINUX環境です。
〜 処理イメージ 〜
InFile.txt
AAAABBBBCCCCDDDDEEEEFFFFGGGG
↓
(シェルで処理)(ZZZZを付加)
↓
InFile.txt
AAAAZZZZBBBBZZZZCCCCZZZZDDDDZZZZEEEEZZZZFFFFZZZZGGGGZZZZ
上記の例では4byteおきに"ZZZZ"を付加していくイメージです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
sh
1sed -i 's/..../&ZZZZ/g' InFile.txt
#追記
「4文字ごと」じゃなくて「文字の変わり目と最後」なら、
sh
1sed -i 's/((.)\2*)/\1ZZZZ/g' InFile.txt
投稿2020/08/29 11:10
編集2020/08/31 11:47総合スコア85766
0
ベストアンサー
>>4byteおきに
なのか
文字の変わり目
なのかで処理は変わりますが、
grep -o . InFile.txt | awk '{if(NR%4!=0){printf $1}else{printf $1 "ZZZZ"}}END{print ""}'
grep -o . InFile.txt | awk '{if(NR==1){pnr=$1};if($1==pnr){printf $1}else{printf "ZZZZ" $1;pnr=$1}}END{print "ZZZZ"}'
の、どっちかでいけるでしょう。
コメントの続きに書いたら、
>>回答に含めるべき内容は回答に追記しましょう
と怒られてしまいました。
細部まで覚えていないし、工数のこともあるのに
せめて書き込んだ際に怒ってくださいよ。
って、まあシステムごときがそんな判断が無理な事は判っていますが・・
改めて、
ファイルに書き込むには「 > outfile.txt」を使用しましょう。
追記するなら「 >> outfile.txt」にしましょう。
元のファイルを変更するやり方でなくて申し訳ない。
sed -i 方式なら元ファイルを変更できます。
投稿2020/08/29 11:05
編集2020/08/31 12:14総合スコア923
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/31 03:57
2020/08/31 12:17
0
めんどくさい方法で
bash
1fold -w 4 InFile.txt >tmp1 2 3seq -f "ZZZZ%g" `wc -l tmp1` | tr -d '[:digit:]' >tmp2 4 5paste tmp1 tmp2 | tr -d "\n" >InFile.txt
投稿2020/08/29 12:38
総合スコア7460
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/29 12:41
2020/08/29 13:59
0
自分でもださいとは思いますが頭が回らない状態なので、
bash
1$ cat InFile.txt | fold -s4 | awk '{print $0, "ZZZZ"}' | awk '{printf $0}' | sed 's/ //g' > InFile.txt 2$ cat InFile.txt 3AAAAZZZZBBBBZZZZCCCCZZZZDDDDZZZZEEEEZZZZFFFFZZZZGGGGZZZZ
投稿2020/08/29 10:27
編集2020/08/29 10:33総合スコア1167
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/29 11:15
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/29 11:39 編集
2020/08/31 11:46