我想在 awk 中执行相当于此操作(对于每一行,从命令行):
items = split(',')
if items[2] >= 10:
return items[0], items[1], 7
if 4 < items[2] < 10:
return items[0], items[1], 2
return items[0], items[1], 1
该文件为 csv 格式,有 3 个字段。
答案1
将以下文本另存为,例如 xxx.awk
#!/usr/bin/awk -f
BEGIN {
FS="," ;
}{
if ( $3 >= 10 ) {
print $1" "$2" "7 ;
} else if ( 4 < $3 && $3 < 10 ) {
print $1" "$2" "2 ;
} else {
print $1" "$2" "1 ;
}
}
然后,运行它
./xxx.awk yourCSVfile
请记住在运行之前执行命令行:“chmod +x xxx.awk”。
答案2
- 分割语法是(分割数组中的
split(i,items,",")
字符串,用 分隔)i
items
,
- 索引从1开始
- awk 不支持
a < b < c
构造 - 连接是通过
a b
你只是想要
split(i,items,",")
if (items[3] >= 10)
return items[1] items[2] 7 ;
if (4 < items[3] ) ## if item[2]>=10, code isn't reached
return items[1] items[2] 2 ;
return items[1] items[2] 1
给出(输入字符串=>结果)
11,11,11 => 11117
5,5,5 => 552
1,1,1 => 111