タブ区切りの.csvファイルがあり、ヘッダー行情報を最初の「新しい」列に移動し、指定された行数だけ下に移動する必要があります。sed
またはなど、現在使用している標準ツールを使用したいが、awk
他のツール/アプローチがより適切な場合は、提案を歓迎します。各ファイルのタイトルが変更されるため、適切な行と列に "CAT"文字列を配置する代わりにファイルをコピーする必要があります。
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
になります:
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
CAT DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
答え1
paste
次のようにすることもできます。
編集済み
これにより、最初の行が再印刷されます。引用符がないことを使用して末尾のスペースは表示されません。
$ paste -d"\t" <(printf "\n\n\n%s" $(head -1 file)) file
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
CAT DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
オリジナル
$ -d"\t" <(printf "\n\n\nCAT") file
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
CAT DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
答え2
次のsedコマンドは私にとって効果的でした。
sed '1!s/^/\t/;4s/^/CAT/'
説明する:
1以外の行では、行の先頭をタブ文字に置き換えます。 4行目の行の先頭をCAT文字列に置き換えます。
答え3
sed
次のように使用できると思います。
hold
最初の行をスペースに保存- 行2から始まる追加のタブ(列)を追加します(これにより、ヘッダーの元の列のソートが維持されます)。
- 指定された次の行(以下の例では4行を使用しました)から次の
hold
内容を空白に置き換え、pattern
空白を削除して行の前に追加します。
$ sed -e '1h' -e '2,$s/^/\t/' -e '4{x;s/[[:space:]]//g;G;s/\n//}' file
CAT
DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
CAT DOG DOG DOG DOG DOG DOG DOG
DOG DOG DOG DOG DOG DOG DOG
答え4
使用awk
:
awk -v line=4 -F '^\t*|\t+' '
NR==1 { OFS="\t"; ins=$2 }
NR!=line { print "","",$0 }
NR==line { print "",ins,$0 }' file
挿入するテキストとしてヘッダー行の空でない最初のフィールドを使用するので、タブや改行を除くすべてのテキストを含めることができます。で常に2番目のフィールドとして読み取られるようにフィールド区切り文字を設定しますawk
。