質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

22093閲覧

複数CSVのヘッダを除去して連結

mosa

総合スコア218

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

1グッド

1クリップ

投稿2017/04/19 03:47

Bashで複数CSVのヘッダを除去して連結する方法を教えてください。

以下のような3ファイルがあったとします。

###a.csv

ヘッダ 1111 2222 3333

###b.csv

ヘッダ 4444 5555 6666

###c.csv

ヘッダ 7777 8888 9999

これを以下のファイルとなるように連結したいですのですが、うまくいかず。
(最初のヘッダは後付でもよいのですが。。。)

ヘッダ 1111 2222 3333 4444 5555 6666 7777 8888 9999

連結順はファイル名の昇順です。
こちら の方法では、以下のようになってしまいます。

1111 2222 3333 ヘッダ 4444 5555 6666 ヘッダ 7777 8888 9999

一見、↓これでもいけそうだと思ったのですが。。。

find . -name '*.csv' | sort | xargs sed -e '1,1d' > output.csv
po3rin👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

awkだけで。

Bash

1awk 'NR==1 || FNR!=1' *.csv

全体の1行目の場合、または、各ファイルの1行目でない場合
に出力する。

投稿2017/04/19 05:17

編集2017/04/19 05:23
otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mosa

2017/04/19 07:35

ハッ!これはカッコイイ。 ありがとうございます。
mosa

2017/04/19 07:36

かっこよくワンライナーできるようになりたいです。
KSwordOfHaste

2017/04/19 07:46

もし面倒でなかったらotnさんへどうぞBAを付け替えてください。非常にわかりやすいので!
mosa

2017/04/20 00:26

お気遣い素敵です。どちらもベストアンサーにしたい! またよろしくお願いします。
KSwordOfHaste

2017/04/20 00:32

一番coolな回答がBAであるべきですねw
guest

0

ベストではないかと思いますがawkで「各ファイルの最初の一行以外を出力」なんてやると簡単は簡単だと思います。

awk 'f != FILENAME { f = FILENAME; next } {print}' *.csv

1ファイルずつawkに食わせるならawk 'NR>1{print}'でよいのでxargsと組み合わせたらいいのかも知れません。


追記:xargsと組み合わせた方が簡単ですね。
ls *.csv | xargs -n 1 awk 'NR>1{print}'

投稿2017/04/19 04:04

編集2017/04/19 04:08
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mosa

2017/04/19 04:20

ありがとうございます! cat *.csv | awk 'NR > 1 {print}' なんてやって、できないなできないな、とか思っていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問