簡體   English   中英

使用Sed或Awk替換字符串

[英]String Replacing using Sed or Awk

Cat vols.txt(此列表可能會有所波動,具體取決於系統可能具有的音量)

$Vol01
$Vol02
$Vol03
$Vol04
$Vol04
$Vol05
$Vol06
$Vol07
$Vol08

如果我做:

cat datavols.log | sed -n 's/^\$.*/vanish \\&\.acd\*\.\* -db ! \&/gp' >> workfile.txt

我得到:

cat workfile.txt

vanish $Vol01.acd*.* -db ! &
vanish $Vol02.acd*.* -db ! &
vanish $Vol03.acd*.* -db ! &
vanish $Vol04.acd*.* -db ! &
vanish $Vol05.acd*.* -db ! &
vanish $Vol06.acd*.* -db ! &
vanish $Vol07.acd*.* -db ! &
vanish $Vol08.acd*.* -db ! &

我有4個CPU,我想在它們之間分配工作,輸出應該是這樣的:

cat workfile.txt

Run –cpu=0 vanish $Vol01.acd*.* -db ! &
Run –cpu=1 vanish $Vol02.acd*.* -db ! &
Run –cpu=2 vanish $Vol03.acd*.* -db ! &
Run –cpu=3 vanish $Vol04.acd*.* -db ! &
Run –cpu=0 vanish $Vol05.acd*.* -db ! &
Run –cpu=1 vanish $Vol06.acd*.* -db ! &
Run –cpu=2 vanish $Vol07.acd*.* -db ! &
Run –cpu=3 vanish $Vol08.acd*.* -db ! &

請幫助我。 我不確定如何在SED中讓變量在0-3之間進行迭代。 提前致謝。

 awk 'BEGIN{i=0}{print "Run –cpu="i " vanish "$1".acd*.* -db ! &"; i=(i+1)%4}' inputfile

將產生輸出為

 Run –cpu=0 vanish $Vol01.acd*.* -db ! &
Run –cpu=1 vanish $Vol02.acd*.* -db ! &
Run –cpu=2 vanish $Vol03.acd*.* -db ! &
Run –cpu=3 vanish $Vol04.acd*.* -db ! &
Run –cpu=0 vanish $Vol05.acd*.* -db ! &
Run –cpu=1 vanish $Vol06.acd*.* -db ! &
Run –cpu=2 vanish $Vol07.acd*.* -db ! &
Run –cpu=3 vanish $Vol08.acd*.* -db ! &

您可以在awk使用FNR ,即文件的當前行號:

awk '{print "Run -cpu=" (FNR-1)%4 " vanish " $0 ".acd*.* -db | &"}' vols.txt

您也可以使用此簡單的bash script

Total_Cpu=4
Count=0
while read line ; do
   if [ $Count  -eq  4 ] ;then
      Count=0
   fi
    echo $line | sed "s/^\$.*/Run –cpu=$Count vanish \&.acd*.* -db ! \&/g" >> Output_file
    Count=`expr $Count + 1`         
done < Input_File

這可能對您有用(GNU sed):

sed -rn '1{x;s/^/0123/;x};G;s/(.*)\n(.)(.*)/Run -cpu=\2 vanish \1.acd*.* -db ! \&\n\3\2/;P;s/.*\n//;h file

用所需的CPU序列創建一行,並將其存儲在保留空間(HS)中。

將HS附加到當前行,並使用替代命令插入cpu編號和所需的字符串,為下一行准備cpu順序。

打印字符串,然后替換HS中修改的cpu順序。

sed '1 {
   x;s/^/Run –cpu=3 vanish :-D.acd*.* -db ! \&/;x
   }
x;y/0123/1230/;G;s/\(.*sh \)[^.]\{1,\}\(.*\)\n\(.*\)/\1\3\2/;h' YourFile

有點像potong bt,使用最后一行作為先前參考僅更改$ vol內容和cpu值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM