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
(これはレコードが切り捨てられ、各ファイルのヘッダーも含まれるため)。
head
CSV認識ツールを使用する代わりにミラー(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
オプションを使用してください。