Bash 使用变量名的值重定向awk输出

Bash 使用变量名的值重定向awk输出,bash,awk,Bash,Awk,我试图awk第一个column1,然后使用sort-u,并使用ask和Ksh创建column1值的文件 for i in `cat /u01/test/test.csv | awk -F , '{print $1}' | sort -u` do { log=/u01/test CLS="LEFT" cat $log/test.csv|grep $i|awk -v v1=$log -v v3=$CLS -v v4=

我试图awk第一个column1,然后使用sort-u,并使用ask和Ksh创建column1值的文件

       for i in `cat /u01/test/test.csv | awk -F , '{print $1}' | sort -u`
       do
       {
       log=/u01/test
       CLS="LEFT"
       cat $log/test.csv|grep $i|awk -v v1=$log -v v3=$CLS -v v4=$i  '{FS = ","}
       {printf("\<TR class\=%s height\=22\>\n",v3) >> v1/"${v4}-test.html";}

       {if ($2 == "ENG" || $2 == "HIN")
       {printf("\<TD class\=yellow align\=left height\=\"17\" width\=\"10\%%\"\>%s \<\/TD\>\n",$1) >> v1/"${v4}-test.html";
       printf("\<TD class\=yellow align\=left height\=\"17\" width\=\"10\%%\"\>%s \<\/TD\>\n",$2) >> v1/"${v4}-test.html";
       printf("\<TD class\=yellow align\=left height\=\"17\" width\=\"10\%%\"\>%s \<\/TD\>\n",$3) >> v1/"${v4}-test.html"}
       else
       {
       printf("\<TD class\=%s align\=left height\=\"17\" width\=\"10\%%\"\>%s\<\/TD\>\n",v3,$1) >> v1/"${v4}-test.html";
       printf("\<TD class\=%s align\=left height\=\"17\" width\=\"10\%%\"\>%s\<\/TD\>\n",v3,$2) >> v1/"${v4}-test.html";
       printf("\<TD class\=%s align\=left height\=\"17\" width\=\"10\%%\"\>%s\<\/TD\>\n",v3,$3) >> v1/"${v4}-test.html"}}
       {if (v3~"RED"){v3 = "YELLOW"} else {v3 = "RED"}}
       {printf("\<\/TR\>\n") >> v1/{v4}-test.html}'
       }
       done
用于'cat/u01/test/test.csv | awk-F'{print$1}'中的i | sort-u`
做
{
log=/u01/test
CLS=“左”
cat$log/test.csv | grep$i | awk-vv1=$log-vv3=$CLS-v4=$i'{FS=“,”}
{printf(“\\n”,v3)>>v1/“${v4}-test.html”;}
{如果($2==“ENG”|$2==“HIN”)
{printf(\%s\\n',$1)>>v1/“${v4}-test.html”;
printf(\%s\\n',$2)>>v1/“${v4}-test.html”;
printf(\%s\\n',$3)>>v1/“${v4}-test.html”}
其他的
{
printf(“\%s\\n”,v3,$1)>>v1/“${v4}-test.html”;
printf(“\%s\\n”,v3,$2)>>v1/“${v4}-test.html”;
printf(“\%s\\n”,v3,$3)>>v1/“${v4}-test.html”}
{if(v3~“RED”){v3=“YELLOW”}else{v3=“RED”}
{printf(“\\n”)>>v1/{v4}-test.html}'
}
完成
但这并不是创建具有column1唯一值的文件

样本输入

朗,英,欣
注册,美国,德克萨斯州
朗,英,西伯
REG,英国,欧洲

样本输出

两个输出文件名为LANG-test.html和REGI-test.html

       <TR Class=CLS height=22>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>ENG</TD>
       <TD class=yellow align=left height=17 width=10>HIN</TD>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>ENG</TD>
       <TD class=yellow align=left height=17 width=10>SIB</TD>
       </TR>
       <TR Class=CLS height=22>
       <TD class=yellow align=left height=17 width=10>REG</TD>
       <TD class=yellow align=left height=17 width=10>USA</TD>
       <TD class=yellow align=left height=17 width=10>TEXAS</TD>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>UK</TD>
       <TD class=yellow align=left height=17 width=10>EUR</TD>
       </TR>
LANG-test.html的内容

       <TR Class=CLS height=22>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>ENG</TD>
       <TD class=yellow align=left height=17 width=10>HIN</TD>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>ENG</TD>
       <TD class=yellow align=left height=17 width=10>SIB</TD>
       </TR>
       <TR Class=CLS height=22>
       <TD class=yellow align=left height=17 width=10>REG</TD>
       <TD class=yellow align=left height=17 width=10>USA</TD>
       <TD class=yellow align=left height=17 width=10>TEXAS</TD>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>UK</TD>
       <TD class=yellow align=left height=17 width=10>EUR</TD>
       </TR>

朗
英格
欣
朗
英格
兄弟姐妹
和其他名为REG-test.html的文件

       <TR Class=CLS height=22>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>ENG</TD>
       <TD class=yellow align=left height=17 width=10>HIN</TD>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>ENG</TD>
       <TD class=yellow align=left height=17 width=10>SIB</TD>
       </TR>
       <TR Class=CLS height=22>
       <TD class=yellow align=left height=17 width=10>REG</TD>
       <TD class=yellow align=left height=17 width=10>USA</TD>
       <TD class=yellow align=left height=17 width=10>TEXAS</TD>
       <TD class=yellow align=left height=17 width=10>LANG</TD>
       <TD class=yellow align=left height=17 width=10>UK</TD>
       <TD class=yellow align=left height=17 width=10>EUR</TD>
       </TR>

规则
美国
德克萨斯州
朗
英国
欧元

试图查找printf语句中的错误,因为awk无法解析printf中的行,其次,基于唯一的第1列重定向输出是一项挑战。关于细节的评论太多了,所以我就写了出来

log=/u01/test
CLS="LEFT"
awk -F, -v v1=$log -v v3=$CLS '
  { printf("<TR class=%s height=22>\n",v3) >> v1"/"$1"-test.html";
    if ($2 == "ENG" || $2 == "HIN") {
      printf("<TD class=yellow align=left height=\"17\" width=\"10%\">%s </TD>\n",$1) >> v1"/"$1"-test.html";
      printf("<TD class=yellow align=left height=\"17\" width=\"10%\">%s </TD>\n",$2) >> v1"/"$1"-test.html";
      printf("<TD class=yellow align=left height=\"17\" width=\"10%\">%s </TD>\n",$3) >> v1"/"$1"-test.html" }
    else {
      printf("<TD class=%s align=left height=\"17\" width=\"10%\">%s</TD>\n",v3,$1) >> v1"/"$1"-test.html";
      printf("<TD class=%s align=left height=\"17\" width=\"10%\">%s</TD>\n",v3,$2) >> v1"/"$1"-test.html";
      printf("<TD class=%s align=left height=\"17\" width=\"10%\">%s</TD>\n",v3,$3) >> v1"/"$1"-test.html" }
    if (v3~"RED") { v3 = "YELLOW" } else {v3 = "RED"}
    printf("</TR>\n") >> v1"/"$1"-test.html"
  }' $log/test.csv
log=/u01/test
CLS=“左”
awk-F,-vv1=$log-v3=$CLS'
{printf(“\n”,v3)>>v1”/“$1”-test.html”;
如果($2==“ENG”|$2==“HIN”){
printf(“%s\n”,$1)>>v1/“$1”-test.html”;
printf(“%s\n”,$2)>>v1/“$1”-test.html”;
printf(“%s\n”,$3)>>v1/“$1”-test.html”}
否则{
printf(“%s\n”,v3,$1)>>v1”/“$1”-test.html”;
printf(“%s\n”,v3,$2)>>v1”/“$1”-test.html”;
printf(“%s\n”,v3,$3)>>v1”/“$1”-test.html”}
if(v3~“RED”){v3=“YELLOW”}else{v3=“RED”}
printf(“\n”)>>v1“/“$1”-test.html”
}“$log/test.csv

注意字符串连接、变量用法和转义字符的更改。for循环已消失,因为其中没有任何意义。希望这有帮助。

请在代码标记中将示例输入文件和预期输出共享到您的文章中。脚本中有几个问题需要解决,但您需要更具体一些。如果您需要每个文件只出现一次TR标记,您可以使用
BEGIN{…}
END{…}
@萨缪84