2015-06-19 11 views
5

Chciałbym wyciąć dwie kolumny z jednego pliku i przykleić je na końcu drugiego pliku. Dwa pliki mają taką samą liczbę wierszybash wyciąć kolumny do jednego pliku i zapisać na końcu innego pliku

file1.txt 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 

file2.txt 
a b c d e f g h i j 
a b c d e f g h i j 
a b c d e f g h i j 
a b c d e f g h i j 

tej pory używam

cut -f9-10 file2.txt | paste file1.txt - > file3.txt 

który wyprowadza dokładnie to, co chcę

1 2 3 4 5 6 7 8 9 10 i j 
1 2 3 4 5 6 7 8 9 10 i j 
1 2 3 4 5 6 7 8 9 10 i j 

Jednak ja nie chcę musiałem zrobić nowy plik Wolałbym zmienić plik 1 na powyższy. Próbowałem już próbować, ale po prostu wypisuje wszystko na ekranie. Czy istnieje sposób na dodanie kolumn 9 i 10 na końcu pliku1.txt?

+0

Proszę zauważyć, że wspomniane dwa pliki mają taką samą liczbę linii, podczas gdy druga ma jeszcze jedną. – fedorqui

Odpowiedz

1

Użyj sponge z moreutils! To pozwala na soak up standard input and write to a file. To znaczy, aby zastąpić plik na miejscu po potoku.

cut -f9-10 file2.txt | paste file1.txt - | sponge file1.txt 

Uwaga Można również zrobić to, co robisz za pomocą paste z process substitution.

$ paste -d' ' file1.txt <(awk '{print $(NF-1), $NF}' file2.txt) | sponge file1.txt 
$ cat file1.txt 
1 2 3 4 5 6 7 8 9 10 i j 
1 2 3 4 5 6 7 8 9 10 i j 
1 2 3 4 5 6 7 8 9 10 i j 

ten łączy file1.txt z dwóch ostatnich kolumnach z file2.txt użyciu ' ' jako ogranicznik.

+0

Jest to znacznie lepsze rozwiązanie niż to, które opublikowałem, więc usunąłem moje i przegłosowałem to. –

+0

Dzięki @MikeAtkins :) Zrobiłem trochę badań i dowiedziałem się o tym "gąbczastym" czymś. Wygląda jak narzędzie! – fedorqui

Powiązane problemy