1

次の形式の csv があります。

Dataset1,

…

…

Dataset2,

..

..

Dataset3,

すべてのデータセットは空白行で区切られています。bash スクリプトでファイルのフォーマットを次のように変更したいと考えています。

Dataset1           Dataset2           Dataset3

...                   …                     …

…                     …                     …

…                     …                     …

これが私のスクリプトです:

#!/bin/bash
input="/path/to/csv/file/file.cvs"
while IFS=',' read -r f1 f2 f3; do
  if [ -z "$f1 $f2 $f3" ]; then
    awk 'BEGIN{getline to_add < "$f1 $f2 $f3"}{print $0,to_add}' f
  fi
  echo "$f1 $f2 $f3"
done < "$input"
4

2 に答える 2

0

これは、コンパクトで読みやすいがハックな + +pr​​ソリューションで、ランタイムが悪いですが、任意のセットで動作します。awk段落モードを使用して特定のデータセットを取得し、プロセスpr置換を使用してそれらを並べて表示するために使用します。

$ cat csv
Dataset1,
ds1foo1

Dataset2,
ds2foo1,ds2bar1
ds2foo2,ds2bar2

Dataset3,
ds3foo1,ds3bar1,ds3quux1
ds3foo2,ds3bar2,ds3quux2
ds3foo3,ds3bar3,ds3quux3

Dataset4,
ds3foo1,ds3bar1,ds3quux1,ds3quuux1
ds3foo2,ds3bar2,ds3quux2,ds3quuux2
ds3foo3,ds3bar3,ds3quux3,ds3quuux3
ds3foo4,ds3bar4,ds3quux4,ds3quuux4

$ ./columnize_paragraphs.sh csv
Dataset1,                Dataset2,                Dataset3,                Dataset4,
ds1foo1                  ds2foo1,ds2bar1          ds3foo1,ds3bar1,ds3quux1 ds3foo1,ds3bar1,ds3quux1
                         ds2foo2,ds2bar2          ds3foo2,ds3bar2,ds3quux2 ds3foo2,ds3bar2,ds3quux2
                                                  ds3foo3,ds3bar3,ds3quux3 ds3foo3,ds3bar3,ds3quux3
                                                                           ds3foo4,ds3bar4,ds3quux4

そしてコード:

#!/bin/bash

get_paragraph_count()
{
    awk 'BEGIN{RS=""}END{print NR}' "$1"
}

get_record()
{
    awk -v record="$2" 'BEGIN{RS=""}NR==record' "$1"
}

columnize_paragraphs()
{
    local file="$1"
    local paragraphs="$(get_paragraph_count "${file}")"
    local args=

    for i in $(seq 1 ${paragraphs}); do
        args="${args} <(get_record '${file}' '${i}')"
    done
    [ -n "${args}" ] && eval "pr -w100 -mt ${args}"
}

for file; do
    [ -e "${file}" ] || continue
    columnize_paragraphs "${file}"
done

ファイルの外観に応じて、行の折り返しを気にしない場合は、-wパラメータをいじったり、構築中にpra を挿入したりする必要があります。foldargs

于 2013-05-05T15:52:18.720 に答える