以下の情報が記載されたファイル(sample.txt)が有ります。
A⇒5回
B⇒3回
というように、右の数字の数だけ左のアルファベットをファイル(result.txt)にリダイレクトしたいです。
whileやfor文を使って検討していますが、なかなかいい案が浮かばないため、ご相談させていただきます。
どうぞ宜しくお願い致します。
sample.txt
+++++++++++++++++++++++++++++++++
[**@**** test]$ less sample.txt
A,5
B,3
C,2
D,1
E,5
F,3
G,2
+++++++++++++++++++++++++++++++++
実現したい内容
result.txt
+++++++++++++++++++++++++++++++++
[**@**** test]$ less result.txt
A
A
A
A
A
B
B
B
C
C
<<略>>
G
G
+++++++++++++++++++++++++++++++++
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
awk使わずにやってみました
cat sample.txt | sed -e 's/^/printf "%0.s/' -e 's/,/\n" {1../' -e 's/$/}/' | sh
投稿2019/04/15 14:29
総合スコア6621
0
動作確認してませんので動かなかったらすんません
#!/bin/sh inf=sample.txt outf=result.txt rm $outf touch $outf cat $inf | tr ',' ' ' | \ while read c n do seq -f "$c%g" $n | tr -d "[:digit:]" >>$outf done
投稿2019/04/15 14:09
総合スコア7458
0
awkのみでできます。
bash
1$ awk -F, '{for(i=0;i<$2;i++){print $1}}' sample.txt > result.txt
個人的には下記のコードのほうが好きですが……
bash
1$ cat sample.txt | awk -F, '{for(i=0;i<$2;i++){print $1}}' | tee result.txt
投稿2019/04/15 10:45
総合スコア132
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/15 13:45
2019/04/15 15:28 編集
2019/04/15 15:26
2019/04/15 15:30
2019/04/20 13:07
0
ベストアンサー
for x in $(cat sample.txt ) do moji=$(echo ${x} | awk -F, '{print $1}') range=$(echo ${x} | awk -F, '{print $2}') for y in $(seq 1 ${range}) do echo $moji done done > result.txt cat result.xt A A A A A B B B C C D E E E E E F F F G G
投稿2019/04/15 07:52
総合スコア2840
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/20 13:15