.csvファイルの最初の行を新しい.csvファイルに抽出します。

.csvファイルの最初の行を新しい.csvファイルに抽出します。

Debian Squeezeの1つのフォルダに1000を超える.csvファイルがあります。 1000個の.csvファイルのそれぞれの最初の行のみを含む新しい.csvファイルを作成しようとしています。

私は試した:

read -r firstline < sourcefile_1.csv > headers.csv

ただし、これにより空のファイルのみが生成されます。 (操作してもファイルの最初の行だけをコピーします。)

フォルダ内の1000個のファイル全体の古い行をコピーして新しい.csvファイルに追加するコマンドを作成するにはどうすればよいですか?

よろしくお願いします!

答え1

head -q -n 1 *.csv > output.csv
-q正常に印刷されるヘッダーを抑制し、-n 1最初の行だけを印刷します。

答え2

CSVファイルにヘッダーがすべて含まれ、改行を含むフィールドを含めることができると仮定すると、各ファイルで実行することはできませんhead(これはレコードが切り捨てられ、各ファイルのヘッダーも含まれるため)。

headCSV認識ツールを使用する代わりにミラーmlr)、より良い選択になります:

mlr --csv put -q 'FNR == 1 { emit $* }' *.csv

これにより、ファイル名のワイルドカードパターンに一致する各ファイルの最初のデータレコードが出力されます*.csv

例:

$ cat file1
a,b
1,2
3,4
$ cat file2
a,b
5,6
7,8
$ cat file3
a,b
field one,"last
field
here"
$ mlr --csv put -q 'FNR == 1 { emit $* }' file[123]
a,b
1,2
5,6
field one,"last
field
here"

CSVファイルのタイトルがない場合は、mlrその-Nオプションを使用してください。

関連情報