0

私のダミーテキストファイル(1つの連続した行)は次のようになります。

AAChvhkfiAFAjjfkqAPPMB

したい:

  1. テキストの一部(特定の範囲)を削除します。
  2. コピー-ファイル内の貼り付け(特定の文字範囲)。

私はこれをどのように行っていますか:

テキストの一部を必要な位置(5〜7文字および10〜14文字)でカットするには、cut

echo 'AAChvhkfiAFAjjfkqAPPMB' | cut --complement -c 5-7,10-14  
AAChfifkqAPPMB

しかし、テキストをコピーして貼り付ける方法が本当にわかりません。例:テキストを15文字から18文字にコピーし、文字1の後に貼り付けます(前の切り取りコマンドも使用)。このような最終結果を得るには:

fkqAAAChfifkqAPPMB

だから私は質問する必要があります:

  1. perl、awk、またはsedを使用して、指定された範囲のテキスト(..から)を読み取り、このテキストを特定の位置に貼り付ける方法。
  2. このテキストの貼り付けを前のカットコマンドと組み合わせる方法。テキストをカットした後は左側に移動するため、間違ったテキストがコピーされます。
4

4 に答える 4

1

多分このようなもの:

$ echo AAChvhkfiAFAjjfkqAPPMB | awk '{ print(substr($1, 0, 14) substr($1, 18) substr($1, 15, 3)) }'
AAChvhkfiAFAjjAPPMBfkq
于 2013-02-10T17:12:33.320 に答える
1

では、文字列配列に分割することにより、配列スライスを使用できます。

my $string = "AAChvhkfiAFAjjfkqAPPMB1";
my @arr = split //, $string;

およびスライス(印刷要素5から7および10から14):

 print @array[5..7,10..14];

splice()を使用して配列を再配置することもできます。

perldocは言った:

OFFSETおよびLENGTHで指定された要素を配列から削除し、存在する場合はそれらをLISTの要素に置き換えます。

http://perldoc.perl.org/perldata.html#Slicesを参照してください

于 2013-02-10T17:13:40.603 に答える
1

Perlでは、substrが良い候補になると思います。たとえば、試してみてください。

$a = '1234567890';
#from pos 2, replace 3 chars with nothing, return the 3 chars
$b=substr($a,2,3,''); 
print "$a\t$b\n"; #1267890    345
#in posistion 0 (first), replace 0 characters (ie pure insert)
#with the content of $b
substr($a,0,0,$b);
print "$a\t$b\n"; #3451267890    345

詳細については、 http://perldoc.perl.org/functions/substr.htmlを参照してください。splice()も候補になる可能性があります。

于 2013-02-10T17:19:39.227 に答える
1

awkを使用すると非常に簡単です:

kent$  echo "AAChvhkfiAFAjjfkqAPPMB"|awk  '
{for(i=5;i<=7;i++)$i="";
 for(i=10;i<=14;i++)$i="";
 for(i=15;i<=18;i++)t=sprintf("%s%s",t,$i);
 $0=t""$0}1' OFS="" FS=""
fkqAAAChfifkqAPPMB

編集

tテキストの一部を逆にするには、とを入れ替えるだけです$i:

kent$  echo "AAChvhkfiAFAjjfkqAPPMB"|awk  '
{for(i=5;i<=7;i++)$i="";
 for(i=10;i<=14;i++)$i="";
 for(i=15;i<=18;i++)t=sprintf("%s%s",$i,t);
 $0=t""$0}1' OFS="" FS=""
AqkfAAChfifkqAPPMB
于 2013-02-10T17:28:57.420 に答える