(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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア7458
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総合スコア5737
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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総合スコア84499
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/19 00:59
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総合スコア22324
0
cat aaa.txt |awk '{print} NR==4{printf "\n\n\n\n"}'
投稿2018/10/18 10:56
総合スコア13671
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/18 15:22
退会済みユーザー
2018/10/19 01:00