私のbash
スクリプトが実行されますsed
。実行に使用するコマンドは次のとおりです。
sed -f sedhw.bash thesbians.txt
コンテンツsedhw.bash
s/[0-9]*//g
s/1908/---/g; s/1895/---/g; s/1903/---/g
s/,.*//g
s/^[^"]*"/"/
s/,[^",]*"/,/;s/"//g
ファイル内の各コマンドを一度実行して1つではなく5つの異なる出力を提供するには、このコマンドが必要です。
テキストファイルは次のとおりです
Chase,Cornelius 1943 "Chevy"
Davis,Ruth 1908 "Bette"
Keaton,Joseph 1895 "Buster"
Stone,Emily 1988 "Emma"
Lee,Shelton 1957 "Spike"
Reynolds,Mary 1932 "Debbie"
Crosby,Harry 1903 "Bing"
Fey,Stamatina 1970 "Tina"
答え1
〜のように@roaimaそしてツイートすでにコメントしており、あなたのものはsedhw.bash
sedfileです。
sed -f sedhw.bash thesbians.txt
sedhw.bashのすべてのsedコマンドは、thesbians.txtファイルに対して実行されます。
今何してるの?代わりにsedhw.bashの行を繰り返し、各行を実行して新しい出力ファイルを生成します。
#!/bin/bash
while read num line; do
sed "$line" thesbians.txt > output.${num}.txt
done < <(nl sedhw.bash)
説明すると、
nl sedhw.bash
コマンドに番号が付けられ、「タブ区切り」の行番号とコマンドが表示されます。
1 s/[0-9]*//g
2 s/1908/---/g; s/1895/---/g; s/1903/---/g
3 s/,.*//g
4 s/^[^"]*"/"/
5 s/,[^",]*"/,/;s/"//g
<(...)
コマンド出力は while ループでファイルとしてレンダリングされます。
ループはこの「ファイル」を1行ずつ入力し、タブ区切りフィールドを変数<
「num」と「line」として読み込みます。
sed
"$line" コマンドを実行して、sedhw.bash の対応する行番号のファイルに書き込みます。
結果
$ for item in output*; do echo; echo "=== $item ==="; cat $item ; done
=== output.1.txt ===
Chase,Cornelius "Chevy"
Davis,Ruth "Bette"
Keaton,Joseph "Buster"
Stone,Emily "Emma"
Lee,Shelton "Spike"
Reynolds,Mary "Debbie"
Crosby,Harry "Bing"
Fey,Stamatina "Tina"
=== output.2.txt ===
Chase,Cornelius 1943 "Chevy"
Davis,Ruth --- "Bette"
Keaton,Joseph --- "Buster"
Stone,Emily 1988 "Emma"
Lee,Shelton 1957 "Spike"
Reynolds,Mary 1932 "Debbie"
Crosby,Harry --- "Bing"
Fey,Stamatina 1970 "Tina"
=== output.3.txt ===
Chase
Davis
Keaton
Stone
Lee
Reynolds
Crosby
Fey
=== output.4.txt ===
"Chevy"
"Bette"
"Buster"
"Emma"
"Spike"
"Debbie"
"Bing"
"Tina"
=== output.5.txt ===
Chase,Chevy
Davis,Bette
Keaton,Buster
Stone,Emma
Lee,Spike
Reynolds,Debbie
Crosby,Bing
Fey,Tina