Вопрос Bash: изменение размеров файлов всех файлов в каталоге и копирование нечетных строк


Как можно взять все *.txt файлы в заданной папке (ввод пользователей) и копирование нечетных строк в файлы с одинаковыми именами, но разные расширения (bat / html или что-то еще)

Я предполагаю cp или mv не работает, что-то вроде sed должен делать трюк для линий, но им трудно скомбинировать все вместе.

Если бы кто-нибудь мог помочь мне собрать это вместе, я был бы очень благодарен

#!/bin/bash
clear

#seems like a good idea to get a full path to the directory im gonna be working in, not #sure how to go about it though. 

path=pwd

#getting users input

read Directory

#check if said directory exists
if[ -d $Directory]; then
#if it does
#all files with .txt extention are to be copied 
for *.txt in $(ls)
do
mv *.txt *.bat

#aaand now im lost, didnt have a chance to even test this, since i have linux only in #my studying enviroment (uni), will get on my personal PC later on
#something like sed could/should work in there, but i have no idea how to go about it

#if doesnt
else
echo "Directory does not exist or you do not have a permission to alter its contents"

1
2017-12-15 23:15


происхождения


Вы хотите переместить нечетные строки в один файл или в разные файлы? - kiri
Я хочу скопировать нечетные строки в разные файлы. Например, 1.txt - скопированные нечетные строки для-> 1.bat - user225827


ответы:


#!/bin/sh 
cd "$1" || { echo "Couldn't cd to directory $1.  Quitting." ; exit 1 ; } 
for fname in *.txt
do
    awk 'NR % 2 == 1 { print; }' "$fname" >"${fname%.txt}.bat"
done

Поместите вышеуказанное в файл и сделайте файл исполняемым (chmod +x yourfilename). Теперь запустите эту команду с каталогом, который вы хотите использовать в качестве первого аргумента.

Сценарий изменяется в запрошенный вами каталог (cd "$1"). Если это не удается (каталог не существует), сценарий завершается с сообщением об ошибке. Если cd "$1" преуспевает, тогда скрипт проходит через каждый .txt файл в каталоге, выбирает нечетные строки (NR % 2 == 1) и записывает их в файл с тем же именем, кроме как с расширением «.bat».


3
2017-12-15 23:24



Благодаря! Кажется настолько упрощенным сейчас, что я смотрю на него. Нужно искать awk, так как я не знаком с этой командой - user225827


Не уверен, что вы подразумеваете под «нечетными строками» [1], но этот оператор достигает того, что делает ваш код в настоящее время:

cd "$1" && rename 's/\.txt$/.bat/' *.txt

Не нужно делать собственные сообщения об ошибках, оболочка будет делать их просто отлично.

[1] Это заставляет его звучать очень похоже на домашнее задание Uni.


0
2017-12-16 07:41



нечетные строки из TXT-файлов, которые можно переименовать. В значительной степени это означало, что C весь семестр, с которым я познакомился до uni, так завершил все задания C, получил сценарий, чтобы ознакомиться с Unix. Множество вещей, которые нужно изучить, а также после C / C ++ и некоторых сборок, делая вещи по всему миру по типу, вместо того, чтобы циклически перебирать все элементы один за другим, - это новая концепция, к которой мне нужно привыкнуть. Ура! - user225827


Спасибо всем, кто ответил, вы очень помогли мне получить некоторое понимание сценариев bash, теперь, когда этот вопрос решен, как можно было бы закрыть вопрос?

Я использовал скрипт, предоставленный John1024, работал безупречно. Очень уместно для этого. ура

! / Bin / ш

cd "$ 1" || {echo "Не удалось записать cd в каталог $ 1. Выход." ; выход 1; } для fname в * .txt делать     awk 'NR% 2 == 1 {print; } '"$ fname"> "$ {fname% .txt} .bat" сделанный


-1
2017-12-19 22:14



Если ответ, данный @ John1024, работал на вас, то, пожалуйста, примите его, а не добавьте свою благодарность в качестве «ответа» - см. askubuntu.com/help/accepted-answer - steeldriver