2011-10-12 15 views
11

Voglio unire due file cat file1 file2 > file3. Ma inizia con una nuova linea. Non lo voglio Potrei usare tr per sostituire tutte le nuove linee nello spazio, ma non posso farlo perché ci sono nuove linee in file che non voglio sostituire.Unione di due file con cat senza nuova riga

+1

lo fa? il mio gatto (su cygwin) non inserisce righe nuove extra prima o dopo uno dei 2 file. Sei sicuro di non avere la nuova riga in file1 o file2? – Kashyap

+0

Puoi chiarire che cosa sono 'file1' e' file2', e quale output vuoi in 'file3'? Esattamente quali nuove linee vuoi nell'output e quali nuove linee non vuoi? –

risposta

14

Potreste usare head con -1 come parametro -c bandiere e -q

head -c -1 -q file1 file2 > file3 

head -c -1 uscita volontà tutto fino all'ultimo 1 byte del codice (in questo caso l'ultima 1 byte - linea di fondo - non rimarrete incluso). Lo -q è così che i nomi dei file non vengono inviati a file3 come head come impostazione predefinita quando head in più file.


Oppure, come suggerito da questa risposta - bash cat multiple files content in to single string without newlines , pipe a tr:

tr -d "\n" 
+0

Mi piace l'opzione 'tr', grazie :) –

2

in bash, si può fare:

cat <(sed -n '1n;p' file1) <(sed -n '1n;p' file2) 
0

si ca usare awk:

awk '(FNR>1){print}' file1 file2 

aggiornamento - come funziona:

chiediamo awk per elaborare due file: file1 e file2. Stamperà l'intero record (riga) se la condizione (FNR>1) è vera. FNR è una variabile defined as:

FNR - Il numero del record di input nel file di input corrente.

quindi, la condizione (FNR>1) sarà vera ogni volta, ad eccezione della prima riga di ciascun file. In questo modo saltiamo la prima riga di ogni file.

+0

can who who upvoted per questo, dirci come funziona? – kommradHomer

+0

@kommradHomer vedere l'aggiornamento –

+1

E ... Non vedo nulla sul voler saltare la * prima * linea di un file ... –