Muszę scalić wiele plików .CSV (za pomocą cat
polecenia), ale bez kopiowania nagłówka dla każdego pliku.
Jaki jest najlepszy sposób na wykonanie tego zadania?
Potrzebujesz więcej niż cat
polecenia, jak opisano tutaj :
Załóżmy, że masz 3 pliki CSV: file1.csv
, file2.csv
, a file3.csv
i chcesz dołączyć je do bigfile.csv
a nagłówek jest zawsze (tylko) w pierwszej linii, a następnie użyć
albo (zachowaj nagłówek z pierwszego pliku „plik1.csv”):
cat file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
lub (usuń nagłówek ze wszystkich plików, których nazwy zaczynają się od „plik”):
awk 'FNR > 1' file*.csv > bigfile.csv
cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
tail -n+2
,tail +2
nie zadziałałobyZgadzam się z najlepszą odpowiedzią, ale proponuję ją rozszerzyć o następujący scenariusz (ponieważ nie mogę komentować):
Jeśli chcesz, aby plik wyjściowy zawierał nagłówek (jeden raz), poprawnym skryptem jest:
awk '(NR == 1) || (FNR > 1)' file*.csv > bigfile.csv
FNR reprezentuje liczbę przetworzonych rekordów w jednym pliku. NR reprezentuje to na całym świecie, więc pierwsza linia jest akceptowana, a pozostałe są ignorowane jak poprzednio.
źródło
Możesz również użyć polecenia group (
{ ; }
) zamiast substytucji procesu (<()
):Działa również z zakończeniami linii CRLF, o ile pliki kończą się pustą linią (
\r\n
).Numery tylko wersji głowy i ogona stały się przestarzałe przez POSIX 1003.1-2001 i powodują ostrzeżenia w niektórych środowiskach.
źródło
Konieczne było połączenie dwóch dużych plików CSV z identycznymi kolumnami w większym pliku CSV w celu utworzenia skryptu (dane nie mają unikalnych identyfikatorów).
Pierwszy wziął nagłówek z drugiego pliku csv
Następnie połączono za pomocą następujących elementów
źródło
Użycie powyższej sekwencji poleceń spowodowało, że plik wyglądał tak:
Aby był to właściwy plik CSV, z jedną linią nagłówka i wszystkimi odpowiednimi wartościami, zastosowałem następującą
sed
inkantację ...sed -ie "/^$/d;/^==>/d" bigfile.csv
źródło
Łatwiejsze rozwiązanie, jeśli masz mnóstwo plików:
Wystarczy wrócić do edycji dużego pliku i ponownie dodać nagłówek.
źródło
awk 'FNR > 1' file*.csv > bigfile.csv
? To nie jest!file