2015-06-19 1 views
5

Я хотел бы вырезать два столбца из одного файла и вставить их в конец второго файла. Два файла имеют точно такое же количество строкbash вырезает столбцы в один файл и сохраняет в конце другого файла

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 

До сих пор я использую

cut -f9-10 file2.txt | paste file1.txt - > file3.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 

Однако я не хочу должен сделать новый файл, я бы предпочел изменить файл 1 на выше. Я пробовал

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

но он просто распечатывает все на экране. Есть ли способ добавить столбцы 9 и 10 в конец файла file1.txt?

+0

Обратите внимание, что вы упомянули, что два файла имеют одинаковое количество строк, тогда как у второго есть еще один. – fedorqui

ответ

1

Используйте sponge от moreutils! Он позволяет вам soak up standard input and write to a file. То есть заменить файл на месте после трубы.

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

Примечание вы можете также делать то, что вы делаете с помощью paste с 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 

Это присоединяется file1.txt с двумя последними столбцами из file2.txt с использованием ' ' в качестве разделителя.

+0

Это гораздо лучшее решение, чем тот, который я опубликовал, поэтому я удалил мой и проголосовал за это. –

+0

Спасибо @MikeAtkins :) Я провел некоторое исследование и узнал об этой «губке». Это похоже на инструмент! – fedorqui