我正在将CSV文件转换为表格格式,我写了一个AWK脚本并将其保存为my.awk。这是我的剧本:
#AWK for test
awk -F , '
BEGIN {
aa = 0;
}
{
hdng = "fname,lname,salary,city";
l1 = length($1);
l13 = length($13);
if ((l1 > 2) && (l13 == 0)) {
fname = substr($1, 2, 1);
l1 = length($3) - 4;
lname = substr($3, l1, 4);
processor = substr($1, 2);
#printf("%s,%s,%s,%s\n", fname, lname, salary, $0);
}
if ($0 ~ ",,,,")
aa++
else if ($0 ~ ",fname")
printf("%s\n", hdng);
else if ((l1 > 2) && (l13 == 0)) {
a++;
}
else {
perf = $11;
if (perf ~/^[0-9\.\" ]+$/)
type = "num"
else
type = "char";
if (type == "num")
printf("Mr%s,%s,%s,%s,,N,N,,\n", $0,fname,lname, city);
}
}
END {
} ' < life.csv > life_out.csv*
如何在Unix服务器上运行此脚本?我尝试使用此命令运行此my.awk文件:
awk -f my.awk life.csv
答案 0 :(得分:30)
您提供的文件是 shell脚本,而不是awk程序。所以,试试sh my.awk
。
如果您想使用awk -f my.awk life.csv > life_out.cs
,请移除awk -F , '
和文件中的最后一行,并在FS=","
中添加BEGIN
。
答案 1 :(得分:17)
如果将#!/bin/awk -f
放在AWK脚本的第一行,则更容易。另外,像Vim和...这样的编辑器会将文件识别为AWK脚本,您可以着色。 :)
#!/bin/awk -f
BEGIN {} # Begin section
{} # Loop section
END{} # End section
然后你可以像这样调用你的AWK脚本:
`$ echo "something" | ./awk-script`
通过运行将文件更改为可执行文件后,例如:
chmod ugo+x ./awk-script
答案 2 :(得分:12)
将BEGIN....END{}
中的部分放在文件中,并将其命名为my.awk。
然后按以下方式执行:
awk -f my.awk life.csv >output.txt
另外,我将字段分隔符视为,
。您可以在 .awk 文件的开始栏中将其添加为FS=","