
*.csv
多くのCSVファイル()があるフォルダを考えてみましょう。彼らはすべて同じヘッダーを持っています。
同じヘッダーを持つ単一のCSVファイルにすべて効率的にリンクするにはどうすればよいですか?
似ていますが、より具体的な問題に対する多くの解決策が見つかりました。
現在awk
、ソリューションは機能していません。
$ cat concat_my_csv_files.sh
#!/usr/bin/env zsh
awk '
FNR==1 && NR!=1 { while (/^<header>/) getline; }
1 {print}
' $1/*.csv > $2
$ ./concat_my_csv_files /some/path/to/csv/files/ full_join.csv
私がするとき:
grep -F column_A full_join.csv
私はそれといくつかの行を見る。
答え1
awk '
NR == 1 {print}
FNR == 1 {next}
{print}
' *.csv
このNR
変数はすべての入力レコードの数です。
このFNR
変数は単に現在のファイルのレコード番号です。
これは、awkが表示する最初の行(最初のファイルのヘッダー)を印刷し、各ファイルの最初の行をスキップして他のすべての行を印刷します。
答え2
デフォルトでは、「head -n 1 firstorany.csv; tail -n +2 *.csv」が必要です。
set -- *.csv
head -n 1 "$1"
tail -n +2 "$@"
* .csvがshスクリプトのパラメータとして使用される場合は、最初の行を省略します。