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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

5回答

1276閲覧

N行目からM行分の空行をいれる

退会済みユーザー

退会済みユーザー

総合スコア0

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2018/10/18 10:02

編集2018/10/18 10:07

(aaa.txt)
aaa 1
bbb 2
ccc 3
ddd 4
eee 5

のようなファイルがあり、4行めと5行めに4行分の空行をいれたいです。

(欲しい結果)
aaa 1
bbb 2
ccc 3
ddd 4
(空行)
(空行)
(空行)
(空行)
eee 5

行番号を変数Nとしています。
入れたい行数を変数Mとしています。

シェルで試行錯誤してみましたが、M行分の空行の書き方がよくわからず、困っています。

cat "aaa.txt" | sed ${N}a $'\n'

で1行空行を入れられることはわかっているのですが、M行分空行を入れるにはどう書けばいいのでしょうか。

pythonで回答していただいても構いません。

よろしくお願いします。

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

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

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

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

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

guest

回答5

0

ではシェルスクリプトのみで…

#!/bin/sh # $1 is file name # $2 is insert line position # $3 is insert empty line count head -n $2 $1 >tmp.txt yes "" | head -n $3 >>tmp.txt #ここはotnさんのを参考にしました x=`wc -l $1` x=`expr $x - $2` tail -n $x $1 >>tmp.txt cat tmp.txt rm tmp.txt

を hoge.sh に保存したとして

chmod +x hoge.sh

こんな感じで

./hoge.sh aaa.txt 4 4

実行します。
まあ、awkやpythonその他かしこいスクリプトの方が
きれいでわかりやすいとは思いますけどね。(汗

投稿2018/10/18 15:13

編集2018/10/18 15:20
takasima20

総合スコア7458

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

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

takasima20

2018/10/18 15:22

head/tail コマンドを -n オプション付きで書き直しました。 -数字 でもいけたような気もしたのですが念のため…
退会済みユーザー

退会済みユーザー

2018/10/19 01:00

たしかにpythonの方がシンプルに書けそうですね 今pythonも勉強中なので、トライしてみます。 ありがとうございます。
guest

0

ベストアンサー

こんな漢字で、

bash

1$ N=4;M=4;cat aaa.txt|awk -vn=$N -vm=$M '1;NR==n{while(m--)print""}' 2aaa 1 3bbb 2 4ccc 3 5ddd 4 6 7 8 9 10eee 5

投稿2018/10/18 12:19

編集2018/10/18 12:22
hichon

総合スコア5737

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

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

退会済みユーザー

退会済みユーザー

2018/10/19 00:58

うまくいきました! 回答ありがとうございます!
guest

0

awkでそのまま書くと、

Bash

1awk '{print}NR=='$N'{for(i=0;i<'$M';i++)print""}'

(訂正:↑処理順序を間違えていたので修正)

sedでは良い方法がないですね。挿入する物をファイルとして作っておくくらい。

Bash

1yes "" | head -$M > work 2cat aaa.txt | sed ${N}rwork

#追加
sedでカウンターを設けるのは難しい。

Bash

1N=4 2M=4 3let N1=N+1 4let M1=M-1 5( printf "%${M1}s\n" "" 6 cat aaa.txt ) | 7sed -e 1{ -e h -e d -e } -e ${N1}{ -e :loop -e -e 'a \' -e "" -e x -e "s/ //" -e x -e "t loop" -e }

投稿2018/10/18 11:56

編集2018/10/18 13:01
otn

総合スコア84499

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

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

退会済みユーザー

退会済みユーザー

2018/10/19 00:59

awkだけでなく、sedを使う方法まで考えていただき、ありがとうございます! 助かりました。
guest

0

pythonでつくりました。
insert_empty_lines.py

python3

1import sys 2 3start_pos = 4 4empty_lines = 4 5 6count = 0 7while True: 8 line = sys.stdin.readline() 9 if line == '': 10 break 11 12 count += 1 13 print(line, end='') 14 if count == start_pos: 15 print("\n" * empty_lines, end='')

実行例
イメージ説明

追記:
for python2

python

1import sys 2 3start_pos = 4 4empty_lines = 4 5 6count = 0 7while True: 8 line = sys.stdin.readline() 9 if line == '': 10 break 11 12 count += 1 13 sys.stdout.write(line) 14 if count == start_pos: 15 for x in range(empty_lines):

参考情報
Python Tips:改行なしで文字列を出力したい
https://www.lifewithpython.com/2013/12/python-print-without-.html

投稿2018/10/18 12:40

編集2018/10/19 11:58
katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2018/10/19 00:40 編集

回答ありがとうございます。 python2.7で実行してみました。 print(line, end='') でinvalid syntaxとエラーになってしまいます。
katoy

2018/10/19 11:59

print 関係が python2 / python3 では差があります。 python2 用のコードを回答に追記しました。
guest

0

cat aaa.txt |awk '{print} NR==4{printf "\n\n\n\n"}'

投稿2018/10/18 10:56

KojiDoi

総合スコア13671

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

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

退会済みユーザー

退会済みユーザー

2018/10/18 11:16 編集

回答ありがとうございます! 質問の書き方が悪かったのですが、4は$Mという変数として使いたいので、\n\n\n\nのような書き方はできないと考えています。 $M=3となるときもあるので、$Mの値が変わっても対応できるようになりませんか?
KojiDoi

2018/10/19 04:20

既に十分な回答が出ているので修正はしません。しかし、前の質問で変数の扱いを理解できているはずなので、それを組み合わせるぐらいのことはすぐに気付きたいところですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問