我有一个情况。 我在Linux中有很多像下面这样的文件
SIPTV_FIPTV_ID00$line_T20141003195717_C0000001000_FWD148_IPV_001.DATaac
SIPTV_FIPTV_ID00$line_T20141003195717_C0000001000_FWD148_IPV_001.DATaag
我想删除$ line并为我的6000个这样的文件制作一个从0001到6000的计数器。 此外,我想在每个文件完成后删除3个字符的预告片。
修复文件后应该像
SIPTV_FIPTV_ID0000001_T20141003195717_C0000001000_FWD148_IPV_001.DAT
SIPTV_FIPTV_ID0000002_T20141003195717_C0000001000_FWD148_IPV_001.DAT
请帮忙。
答案 0 :(得分:0)
有了一些假设,我认为应该这样做: 1.文件列表位于名为input.txt的文件中,每行一个文件 2.代码在文件所在的目录中运行 3. bash可用
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
答案 1 :(得分: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,作为最后一句话我不得不说在类似情况下我更喜欢在将命令传递给shell之前至少进行一次干运行。