2

私はこの種のテーブルを持っています:

classA, s1, ss1
classA, s1, ss2
classA, s2, ss1
classB, s1, ss1
classB, s1, ss2
classC, s1, ss1
classC, s2, ss1
classC, s2, ss2

1列目の連続した値に従って、「classA」、「classB」、「classC」という3つのファイルに分割したいと思います。最初に csplit を使用してそれを行う方法を見つけようとしましたが、パターンが変更されたときではなく、指定されたパターンでのみ機能するようです。それを行う awk の方法や他のコマンドライン ツールはありますか?

[更新] 1 番目の列にも、そのエラーにつながるスラッシュがいくつかあります。例:

classA, s1, ss1
classA, s1, ss2
classA, s2, ss1
classB, s1, ss1
classB, s1, ss2
classC, s1, ss1
classC, s2, ss1
classC, s2, ss2
classA/classA.1/classA.2, s1, ss1
classA/classA.1/classA.2, s1, ss2

そして、コマンドを実行すると:

awk -F, '{ print $0 > $1}' infile

「classC」までは機能しますが、「/」をパスとして解釈すると思われるため、そのエラーが発生します。

fatal: can't redirect to `classA/classA.1/classA.2' (No such file or directory)
4

1 に答える 1

3
awk -F, '{ print $0 > $1}' infile 

出力

-rw-r--r-- 1 shellter root  48 Sep 13 14:01 classC
-rw-r--r-- 1 shellter root  32 Sep 13 14:01 classB
-rw-r--r-- 1 shellter root  48 Sep 13 14:01 classA

$1 には "/.../path/info" があります。

awk -F, '{ outFile="$1"; gsub(/\//, "", outFile); print $0 > outFile }' infile

を実行しない場合gsub()、「/」文字は出力ファイルを作成するためのパスに従うように解釈されます。もちろん、指定されたパスが存在する必要があります。存在しないと、その影響に関するエラー メッセージが表示されます。

一部の awks は のような「/」文字を持つことを好むことに注意してください。または、検索ターゲットとしてgsub(/[\/]/,"", fileName)必要になることさえあるかもしれません。[\\/]

IHTH

于 2012-09-13T18:00:02.573 に答える