2012-02-28 25 views
8

Ho un file che assomiglia a questo:Perché awk non stampa le nuove righe?

1 
2 
AA 
4 
5 
AA BB 
7 
8 
AA BB CC 
10 
11 
AA BB CC DD 

Sto usando awk per estrarre solo ogni nth riga in cui n=3.

>>awk 'NR%3==0' /input/file_foo >> output/file_foobar 

L'uscita sta comparendo in una sola riga come:

AA AA BB AA BB CC AA BB CC DD 

..... e così via

voglio che appaia come:

AA 
AA BB 
AA BB CC 
AA BB CC DD 

Ho provato a utilizzare \n, printf con \n e così via, ma non funziona come previsto. Si prega di avvisare.

+2

Quale shell stai usando? Questo è un prompt convenzionale che non indica il tipo di shell. Come stai dimostrando che i dati sono piatti su una singola riga? –

+1

Hai provato a cambiare la variabile RS? –

+0

Grazie. Stavo usando Cygwin ma il terminatore di linea non era corretto come menzionato da Shiplu. – mane

risposta

8

Un modo verbose,

awk '{ if (NR%3==0) { print $0} }' 

Inoltre è possibile utilizzare {printf("%s\n\n", $0)} troppo. se il singolo \n non funziona.

Se non funziona ancora, potrebbe essere necessario controllare il terminatore di linea. Potrebbe non essere corretto. Utilizzare la variabile RS in awk per separare il terminatore di linea insolito.

+0

Non sembra funzionare affatto. Il secondo produce alcuni errori. il primo non stampa affatto i risultati corretti. In realtà voglio copiare ogni terza riga di un file in un altro file, tutto qui. – mane

+1

Penso che il terminatore di linea File non sia corretto. –

+0

Grazie Shiplu. Il terminatore di riga non era corretto. Ora funziona. – mane

2

Usare il seguente con print per ogni linea:

awk 'NR%3==0 { print $0 }' /input/file_foo >> output/file_foobar 
3

Credo che il problema è nel modo in cui si sta mostrando i dati, non nella lavorazione.

$ cat x 
1 
2 
AA 
4 
5 
AA BB 
7 
8 
AA BB CC 
10 
11 
AA BB CC DD 
$ awk 'NR%3==0' x 
AA 
AA BB 
AA BB CC 
AA BB CC DD 
$ 

ho il sospetto che quello che stai facendo è simile a:

$ awk 'NR%3==0' x > y 
$ x=$(<y) 
$ echo $x 
AA AA BB AA BB CC AA BB CC DD 
$ echo "$x" 
AA 
AA BB 
AA BB CC 
AA BB CC DD 
$ 

Questo sarebbe confondere. Vedi anche: Capturing multi-line output to a bash variable.

+0

Funziona bene. Grazie – mane

Problemi correlati