迭代打印输出中的每一行

迭代打印输出中的每一行

我想uvuveve在每行结束时打印 while 语句的每个输出,如下所示:

var1;var2;uvuveve
var1;var2;uvuveve
var1;var2;uvuveve
var1;var2;uvuveve
var1;var2;uvuveve

这是我的代码:

var1="somedata..."
var2="anotherdata..."
while read -u3 w1; read -u4 w2; do
echo "$w1;$w2" >> $file
done 3<<< "$var1" 4<<<"$var2"

var1、var2 打印文件中的多次出现,因此这些变量有很多输出。我尝试uvuveve像这样添加单词:

var1="somedata..."
var2="anotherdata..."
string="uvuveve"
while read -u3 w1; read -u4 w2; read -u5 w3; do
echo "$w1;$w2;$w3" >> $file
done 3<<< "$var1" 4<<<"$var2" 5<<<"$string"

本质上,我需要在每行中打印出每个出现的单词。

添加详细信息:

Var1&var2检索文件包含的出现行,然后放入变量中

从字面上看,这些行是:

var1=$(grep -A12 -B12 "$tofind" $findlogs | grep Date | cut -c 51-65 | sed -e 's! !/!g')
var2=$(grep -A12 -B12 "$tofind" $findlogs | grep Date | cut -c 67-71 | sed -e 's/://g')

答案1

由于变量中只有纯文本,因此将它们重定向到 while-read 循环似乎过于复杂。

出了什么问题

var1="somedata..."
var2="anotherdata..."
string="uvuveve"

echo "$var1;$var2;$string"
# or
printf '%s;%s;%s\n' "$var1" "$var2" "$string"

如果您确实有文件,那么您确实需要一个循环。如果我们有

$ cat file1
a
b
c
$ cat file2
1
2
3

然后

string="uvuveve"
while IFS= read -r -u3 a; read -r -u4 b; do 
    printf '%s;%s;%s\n' "$a" "$b" "$string"
done 3<file1 4<file2
a;1;uvuveve
b;2;uvuveve
c;3;uvuveve

返回到您的编辑:使用流程替代s

# don't repeat yourself
dates=$(grep -A12 -B12 "$tofind" $findlogs | grep Date)
string="uvuveve"
while IFS= read -r -u3 a; read -r -u4 b; do 
    printf '%s;%s;%s\n' "$a" "$b" "$string"
done 3< <(echo "$dates" | cut -c 51-65 | sed -e 's! !/!g') \
     4< <(echo "$dates" | cut -c 67-71 | sed -e 's/://g')

答案2

这是你想要的吗?

#!/usr/bin/env bash
IFS=$'\n'; var1=( $( ... your command here ... ) );
IFS=$'\n'; var2=( $( ... your command here ... ) );

for i in ${!var1[@]}; do
  echo ${arr1[$i]};${arr2[$i]};uvuveve
done

它假设var1var2具有相同数量的行。

基本上:

  1. 我们将您的命令转换为一个数组变量。来源
  2. 然后我们迭代数组(来源)将变量和额外的字符串添加在一起。

答案3

尝试使用以下命令

$ j="praveen"
$ k="ajay"
$ m="abhi"

$ awk -v j="$j" -v k="$k" -v m="$m" '{print j"\n"k"\n"m;exit}'
praveen
ajay
abhi

相关内容