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)
你可以用 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)