多次重复文本

lij*_*jun 3 linux bash awk for-loop

我想重复输入文本 5 次,并想保存在另一个文本文件中。但是在每次重复中,第一行和最后一行编号只能更改。

我的输入文本是:

READ 1 ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE 1A ALL
Run Code Online (Sandbox Code Playgroud)

输出:

READ 1 ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE 1A ALL

READ 2 ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE 2A ALL

READ 3 ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE 3A ALL

READ 4 ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE 4A ALL

READ 5 ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE 5A ALL
Run Code Online (Sandbox Code Playgroud)

我试过

#!/bin/sh
for file in `cat input.txt`
do
yes $file
done
Run Code Online (Sandbox Code Playgroud)

daw*_*awg 5

你可以用 Perl 做到这一点:

echo 'READ %s ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE %sA ALL' | perl -0777 -nE '
for($x=1; $x<=5; $x++) { say sprintf $_, $x, $x }'
Run Code Online (Sandbox Code Playgroud)

或者在 awk 中:

echo 'READ %s ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE %sA ALL' | awk -v RS= '{for(i=1;i<=5;i++) printf($0 "\n\n",i,i)}'
Run Code Online (Sandbox Code Playgroud)

外壳中的相同概念:

s='READ %s ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE %sA ALL'

for i in {1..5}; do
    printf "$s\n\n" "$i" "$i"
done    
Run Code Online (Sandbox Code Playgroud)

如果你不希望为创建一个模板printf与使用%s为您更换,我会用perl可用更精确的正则表达式:

echo 'READ 1 ALL
DMN 2,3 ^DTND
DEL 2,3
WRITE 1A ALL' | perl -0777 -nE '
for($x=1; $x<=5; $x++) { 
    $s=$_; 
    $s=~s/^(READ |WRITE )(1)(?=\D|$)/$1$x/g; 
    say $s }'
Run Code Online (Sandbox Code Playgroud)