Печатать только определенные столбцы с сохранением пробелов

Я думаю, что это лучше всего было бы решить с помощью рекурсивной программы, к сожалению, я плохо создаю рекурсивные сценарии оболочки, поэтому я собираюсь рекомендовать программу C ++. Форматирование не является стандартным, использует операторы goto, и оно делает много системных вызовов, но оно сделает свою работу. Поскольку информация не была предоставлена, это предполагает, что все tarballs используют .tar в качестве суффикса, все tarballs имеют формат gzip (легко исправляемый, если это не соответствует действительности), и что имя файла, который необходимо удалить, одинаково во всех tarballs.

#include
#include
#include
#include
#include

с использованием пространства имен std;

int main()
{
system("touch ~/tarlist; list=$(найти /path/to/tarballs/ тип -f); эхо $list > ~/tarlist; касание ~/currentTarline; касание ~/currentTarcolumn; сенсорный токТар");
система("касание ~/numoflinesTMP1; касание ~/нумофлайнов; num=$(wc -l ~/tarlist); эхо $num > ~/numoflinesTMP; num1=$(cut -c 1 ~/numoflinesTMP); эхо $num 1 > ~/нумофлайны"); mkdir ~/tmp/
int maxlines;
ifstream MAXLINES("~/numoflines");
МАКСЛАЙНС>>макслины;
MAXLINES.close();
int currentline=1;
GETTAR:
ofstream CURRENTLINE("~/currentTarline");
ТЕКУЩАЯ ЛИНИЯ<<ток;
ТЕКУЩАЯ ЛИНИЯ.ЗАКРЫТИЕ();
system(line=$(cat ~/currentTarline); nameoftar=$(cat ~/tarlist | sed '$line!d'); echo $nameoftar > ~/currentTar; extract=$(cat ~/currentTar); cd ~/tmp/; tar -xzf $extract; rm *nameoffile*; tar czf $extract ./*; newline=$(( $line + 1 )); echo $newline > ~/currentTarline");
ifstream NEWLINE("~/currentTarline");
NEWLINE>>ток;
NEWLINE.close();
if(currentline>=maxlines)
{
cout<
возврат 0;
}
else if(текущая линия
{
goto GETTAR;
}
}

Прошу прощения за отсутствие горизонтального форматирования, но я не мог найти способ сделать это, не дав ему структуру списка. Несколько переменных, используемых в этом коде, являются заполнителями, и вам может потребоваться настроить определенные строки, чтобы учесть рабочий каталог, который должна использовать программа, имя файла, который необходимо удалить из tarballs, и фактический родительский каталог tarballs. Надеемся, что это будет работать в качестве общего руководства. Если вы действительно хотите, вы также можете взять большинство системных вызовов и поместить их в рекурсивный сценарий оболочки, но я лично думаю, что тратить время на то, чтобы сделать сценарий оболочки рекурсивным в первую очередь, является более хлопотным, чем просто создание оболочки C++ для него. Удачи!

1
17.11.2017, 06:00
0 ответов

Теги

Похожие вопросы