web-dev-qa-db-ja.com

文字列トークンをbashで解析する

私はこの出力を持っています(前のコマンドから):

aaa         something
bbb         someother
ccc         blabla

各行について、名前が最初のトークンで、内容が2番目のトークンであるファイルを作成したいと思います(たとえば、最初の行では、テキスト「something」を含む「aaa」という名前のファイルが必要です)

どうすればよいですか?

4
michelemarcon

シンプルなawkスクリプトソリューション。 2番目のフィールドは、最初のフィールドから名前が付けられたファイルに書き込まれます。

awk '{ print $2 > $1 }' your-file
5
suspectus

@suspectusの answer は正しいです。次のような複雑なケースの場合:

aaa         something, something more and a bit extra
bbb         someother someother more and a few more chars
ccc         blabla blah blah boloum bloum bleh

また、名前を最初のフィールドにし、内容を行の残りの部分にしたい場合は、次のようにしてください。

awk '{for(i=2; i<=NF; i++){ printf $i" " >> $1 };print "" >> $1;}' file

または、Perlの場合:

Perl -ane 'open($f,">",shift(@F));print $f "@F\n"' file
2
terdon
your_command | while read name text; do
        echo "$test" > $name
    done

IFS環境変数は、これが解析される方法(単語分割)に影響を与えることに注意してください。ファイル名に「特殊」文字が含まれることに特に注意する必要がありますnot (およびテキスト)。

2
peterph