2014-10-04 2 views
-2

У меня есть ситуация здесь. У меня есть много файлов, как показано ниже в Linuxпереименование файлов с использованием цикла в unix

SIPTV_FIPTV_ID00$line_T20141003195717_C0000001000_FWD148_IPV_001.DATaac 
SIPTV_FIPTV_ID00$line_T20141003195717_C0000001000_FWD148_IPV_001.DATaag 

Я хочу, чтобы удалить $ линию и сделать счетчик от 0001 до 6000 для моих 6000 таких файлов в своем месте. Также я хочу удалить трейлер из 3 символов после этого для каждого файла.

После файла исправление должно быть как

SIPTV_FIPTV_ID0000001_T20141003195717_C0000001000_FWD148_IPV_001.DAT 
SIPTV_FIPTV_ID0000002_T20141003195717_C0000001000_FWD148_IPV_001.DAT 

Пожалуйста, помогите.

+0

У вас есть возможность с Perl? – Beta

ответ

0

С некоторым предположением, я думаю, что это следует сделать это: 1. список файлов находится в файле с именем input.txt, один файл в строке 2. код выполняется в директории файлы находятся в 3. Баш доступен

awk '{i++;printf "mv \x27"$0"\x27 ";printf "\x27"substr($0,1,16);printf "%05d", i;print substr($0,22,47)"\x27"}' input.txt | bash 
0

из командной строки дают следующую команду

% echo *.DAT??? | awk '{ 
    old=$0; 
    sub("\\$line",sprintf("%4.4d",++n)); 
    sub("...$",""); 
    print "mv", old, $1}' 
% 

и проверьте вывод, если он выглядит нормально

% echo *.DAT??? | awk '{ 
    old=$0; 
    sub("\\$line",sprintf("%4.4d",++n)); 
    sub("...$",""); 
    print "mv", old, $1}' | sh 
% 

Комментарий: echo *.DAT??? предназначен для ввода в качестве awk списка всех имен файлов, которые вы хотите изменить, может потребоваться что-то более четко сформулированное, если имена примеров, которые вы дали, не являются репрезентативными для всего спектра. .. в отношении самого скрипта awk я использовал sprintf для генерации строки с правильным количеством нулей для замены $line, идиома `` \\ $ ... "с двумя обратными косыми чертами, чтобы процитировать знак доллара, требуемый gawk и не имеет никакого вреда в mawk, и, как последнее замечание, я должен сказать, что в подобных случаях я предпочитаю сделать хотя бы сухой пробег перед передачей команд в оболочку ...

Смежные вопросы