Unix 使用awk将一个文件的字段附加到另一个文件

Unix 使用awk将一个文件的字段附加到另一个文件,unix,awk,Unix,Awk,我试图将一个文件(数据库)的每一行附加到另一个文件的末尾,以便使用awk在html表中使用。我一直在“}”处遇到语法错误,不知道为什么 cat cds.db | sort -t':' -k4 | awk -F':' '{for i in $(cat cds.db) do echo "<tr><td align=left> $2 </td><td align=left> $1 </td><td align=right> $4

我试图将一个文件(数据库)的每一行附加到另一个文件的末尾,以便使用awk在html表中使用。我一直在“}”处遇到语法错误,不知道为什么

cat cds.db | sort -t':' -k4 | awk -F':' '{for i in $(cat cds.db) do echo "<tr><td align=left> $2 </td><td align=left> $1 </td><td align=right> $4 </td></tr>" }' >>cds.html done
cat cds.db | sort-t':'-k4 | awk-F':''{for i in$(cat cds.db)do echo“$2$1$4”}>>cds.html完成

考虑以下输入文件:

$ cat cds.db
Morrison, Van:Astral Weeks:Warner Bros:1968
McKennet, Loreena:Book of Secrets:Warner Bros:1997
Indigo Girls:Shaming of the Sun:Epic:1997
要按年份排序并对字段重新排序,请执行以下操作:

$ sort -t: -k4 cds.db | awk -F: '{print $2":"$1":"$4 }' 
Astral Weeks:Morrison, Van:1968
Shaming of the Sun:Indigo Girls:1997
Book of Secrets:McKennet, Loreena:1997
注:

  • 冒号(
    )未处于shell活动状态。因此,没有特殊的报价要求

  • awk
    隐式循环每个输入行。因此,不必为循环设置一个
    ,以便在行中读取

  • 对于输出,
    awk
    具有
    print
    printf
    语句。它没有回声

  • 上面的脚本假定您希望在输出时使用冒号作为字段分隔符。如果没有,则可以调整
    打印
    语句

使用输出字段分隔符的替代方法 如果
print
的参数用逗号分隔,则在打印时,
awk
在它们之间插入输出字段分隔符
OFS
。以下使用此方法并生成与上述相同的输出:

sort -t: -k4 cds.db | awk -F: -v OFS=: '{print $2,$1,$4 }'

awk
代码确实存在几个问题。请您展示一下CD.db中的几行,以及您希望这些行的输出是什么样子的?这是文件中的几行:Morrison,Van:Astral Weeks:Warner Bros:1968\n McKennet,Lorena:Book of Secrets:Warner Bros:1997\n Indigo Girls:Shaming of the Sun:Epic:1997\n我希望输出成为标题,艺术家,年我对awk非常陌生,我知道awk对语法非常挑剔。