次のテキストファイル(1.txt)があります。
word1
word2
word3
私はsedを使用して、次のように各行の先頭と末尾に文字列を追加します。
sed 's/^/blahblah1 /g' 1.txt > 2.txt
sed 's/$/ blahblah2/g' 2.txt > 3.txt
次に続く:
blahblah1 word1 blahblah2
blahblah1 word2 blahblah2
blahblah1 word3 blahblah2
これはうまくいきますが、より多くのことをしたいと思います。
次のように、各行の中間(word1、word2など)の文字列を各行の末尾にコピーしたいと思います。
blahblah1 word1 blahblah2 word1
blahblah1 word2 blahblah2 word2
blahblah1 word3 blahblah2 word3
blahblah1とblahblah2はbashコマンドと他の文字列リテラルのみを表し、sedコマンドで示されているように、各行の先頭と終わりは同じです。 2つの間の文字列は異なります。これらの文字列は実際には「blahblah1」ではなく、「バラバラ2」。
どんな提案がありますか?
基本的に、文字列リストを含むテキストファイルを取得し、文字列を含むコード行をつかみ、その文字列を含むファイル名を持つファイルにダンプするコマンドのリストを含むbashスクリプトを作成したいと思います。列。
答え1
編集:次は、「中間単語」が2番目の単語であると仮定しているため、これが問題を解決できない可能性があることに気づきました。
このスクリプトを試してください。ファイルから入力を読み込みます。input.txt
while read ln; do
middle_word=`awk '{print $2}' <<< "$ln"`
new="$ln $middle_word"
echo "$new"
done < input.txt
提供された入力に基づいて、次の出力が提供されます。
blahblah1 word1 blahblah2 word1
blahblah1 word2 blahblah2 word2
blahblah1 word3 blahblah2 word3
警告:何らかの理由で各行の先頭のスペースが失われます。
答え2
AWKを使用した実装は非常に簡単です。
$ awk '{print "blah1",$0,"blah2",$0}' 1.txt
blah1 word1 blah2 word1
blah1 word2 blah2 word2
blah1 word3 blah2 word3
またはPythonを使用してください。
$ python -c "import sys; print '\n'.join([ ' blah1 ' + l.strip() + ' blah2 ' + l.strip() for l in sys.stdin])" < 1.txt
blah1 word1 blah2 word1
blah1 word2 blah2 word2
blah1 word3 blah2 word3
どちらの場合も、アイデアは同じです。ファイル(またはPythonの場合はstdin)を1行ずつ読み、読み取った内容で構成される新しい文字列を印刷します。