Як скопіювати кілька перших рядків гігантського файлу та додати рядок тексту в кінці його за допомогою деяких команд Linux?


89

Як скопіювати кілька перших рядків гігантського файлу та додати рядок тексту в кінці його, використовуючи деякі команди Linux?


1
В башіhead -n 100 yourfile.csv > shrunkfile.csv && echo 'morelines' >> shrunkfile.csv
Ерік Лещинський

Відповіді:


147

headКоманда може отримати перші nрядки. Варіації:

head -7 file
head -n 7 file
head -7l file

який отримає перші 7 рядків файлу, який називається "file". Команда, яку потрібно використовувати, залежить від вашої версії head. Linux працюватиме з першим.

Щоб додати рядки до кінця того самого файлу, використовуйте:

echo 'first line to add' >>file
echo 'second line to add' >>file
echo 'third line to add' >>file

або:

echo 'first line to add
second line to add
third line to add' >>file

зробити це одним ударом.

Отже, пов’язуючи ці дві ідеї, якщо ви хочете отримати перші 10 рядків input.txtфайлу output.txtта додати рядок із п’ятьма "="символами, ви можете використовувати щось на зразок:

( head -10 input.txt ; echo '=====' ) > output.txt

У цьому випадку ми виконуємо обидві операції в допоміжній оболонці, щоб консолідувати вихідні потоки в один, який потім використовується для створення або перезапису вихідного файлу.


21

Я припускаю, що ви намагаєтесь досягти, це вставити рядок після перших кількох рядків текстового файлу.

head -n10 file.txt >> newfile.txt
echo "your line >> newfile.txt
tail -n +10 file.txt >> newfile.txt

Якщо ви не хочете залишити рядки з файлу, просто пропустіть хвостову частину.


3
Підоболонки дозволяють це робити без повторного відкриття вихідного файлу:(head -n10 file.txt ; echo "Some stuff" ; tail -n +10 file.txt) > newfile.txt
hobbs

5

Перші кілька рядків: man head.

Додавання рядків: використовуйте >>оператор (?) У Bash:

echo 'This goes at the end of the file' >> file
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.