CSVファイルを1行ずつ分割し、両方の出力ファイルにヘッダを保持する方法は?

CSVファイルを1行ずつ分割し、両方の出力ファイルにヘッダを保持する方法は?

次のコマンドを使用してcsvファイル(sample.csv)を分割しようとしています。

split -n 2 -a 1 -d sample.csv test_

同じサイズの2つのファイルを取得しました。 1つはヘッダーがあり、もう1つはヘッダーがなく、末尾の行が切り捨てられます。

以下のスクリプトを見ると、端末に結果が表示されますが、ファイルは生成されません。

split -n 1/2 -a 1 -d sample.csv test_

ベストアンサー1

どちらのコマンドも設計どおりに動作するようです。

行を考慮しない最初の分割はバイトに分割されます。大規模なバイナリオブジェクトを分割するのに便利ですが、CSVなどの場合はそれほど便利ではありません。

2番目は文書を誤って読んだようです(ただし、技術的にはまだ有効です)。

私の考えでは、あなたがこれをしたいと思います:

split -n l/2 -a 1 -d sample.csv test_

これはまさにあなたがやっているように見えるものではlower case L slash twoないことに注意してください。one slash two

split2番目のセクションでは、内容が実際には理解されていないため、ヘッダー行は表示されません。

1つの方法は、次のことを行うことです。

# extract header row and save
head -n1 sample.csv > header
# skip header row and split records to temporary files
tail -n+2 sample.csv | split -n l/2 -a 1 -d temp_
# make final files from header and split records
for f in temp_? ; do
  cat header "$f" > "${f/temp/test}"
  # clean up temporary file
  rm "$f"
done
# clean up header file
rm header

おすすめ記事