0

このタイプの列と行が多数ある csv ファイルがあります。

foo.csv

1 1 x1
1 1 x2
1 1 y1
1 1 y2
. . .

次のようにするには、どのコマンドを使用するか、どのスクリプトを作成する必要がありますか。

foo.csv

1   1   x1   1   1   y1
1   1   x2   1   1   y2
.   .   .     .   .    .

つまり、1 1 y1 から始まる foo.csv の最後の行を最初の行の列に移動します。

前もって感謝します!

ポール

4

2 に答える 2

0
$ cat /tmp/1
abc 1
def 2
ghi 3
pqr 4
uvw 5
xyz 6

$ paste <(head -3 /tmp/1) <(tail -3 /tmp/1)
abc 1   pqr 4
def 2   uvw 5
ghi 3   xyz 6

ここでは、最初の列に 3 つの文字列を使用し、2 番目の列に 3 つの文字列を使用します。取りたい弦の数がわからない場合は、最初に見つけることができます。

$ n=$(cat -n /tmp/1 | grep pqr | cut -f1)
$ paste <(head -$((n-1)) /tmp/1) <(sed 1,$((n-1))d /tmp/1)
abc 1   pqr 4
def 2   uvw 5
ghi 3   xyz 6
于 2013-11-05T09:35:21.757 に答える
0

必要に応じて awk レコード セレクターを調整します

paste -d " " <(awk '$3~"x"' tests.txt) <(awk '$3~"y"' tests.txt)
于 2013-11-05T12:37:33.463 に答える