假设我有一个输入为1,2,3等的文本文件。如何将其更改为一,二,三,反之亦然?
我只是想知道为if语句设置字段值的方法。
#! usr/bin/awk -f`
{
for(i=0; i<= NF; i++)
if(i == "1")
printf "one"
}
答案 0 :(得分:2)
不要使用一堆if-else,因为它非常低效,难以维护,并且在给定所有重复代码的情况下容易出现编码错误。只需使用一个数组(在awk中是一个非常有效的哈希表)将每个数字映射到它的名称:
echo '1,2,3,4,5,6,7,8,9' |
awk -F, 'BEGIN{split("one,two,three,four,five,six,seven,eight,nine",m)}
{for (i=1;i<=NF;i++) printf "%s=%s%s", $i, m[$i], (i<NF?OFS:ORS)}'
1=one 2=two 3=three 4=four 5=five 6=six 7=seven 8=eight 9=nine
答案 1 :(得分:-1)
以下代码说明: 代码的BEGIN部分将字段分隔符设置为“,”。这样,for语句将使用$ NF变量循环遍历字段,该变量存储当前记录所具有的字段数。
其余代码与任何结构编程语言非常相似。
BEGIN { FS="," }
function get_text_number(num) {
if(num == "0") {
return "zero"
}
else if(num == "1") {
return "one"
}
else if(num == "2") {
return "two"
}
else if(num == "3") {
return "three"
}
else if(num == "4") {
return "four"
}
else if(num == "5") {
return "five"
}
else if(num == "6") {
return "six"
}
else if(num == "7") {
return "seven"
}
else if(num == "8") {
return "eight"
}
else if(num == "9") {
return "nine"
}
}
{
for(i = 1; i <= NF -1 ; i++) {
printf("%s,",get_text_number($i));
}
printf("%s\n",get_text_number($NF));
}
执行:awk -f transform.awk test.txt