【发布时间】:2018-02-05 22:34:45
【问题描述】:
我正在尝试执行以下操作:
- 逐行读取文件。
- 每一行的结构如下:
field1;field2;field3 - 使用
awk分隔每个字段,然后进一步处理每个字段
我的sn-p代码是:
while read l
do
n=`echo ${l} | awk --field-separator=";" '{print NF}'`
field1=`echo ${l} | awk --field-separator=";" '{print $1}'`
field2=`echo ${l} | awk --field-separator=";" '{print $2}'`
field3=`echo ${l} | awk --field-separator=";" '{print $3}'`
echo ${n} ${field1} ${field2} ${field3}
done < temp
其中 temp 仅包含以下行:
xx;yy;zz
我在命令行得到的答案是:
1 xx;yy;zz
我不确定我是否理解此输出。任何解释都会很好,因为它确实适用于其他文件。我在 Mac 上工作,而这段代码在 bash 脚本中使用 awk。
【问题讨论】:
-
我得到了预期的输出:
3 xx yy zz你使用的是哪个版本的awk? -
awk --version导致“awk 版本 20070501” -
@devnull:我认为它只找到一个字段:xx;yy;zz 而不是 xx yy zz
-
尝试
-F';'而不是--field-separator=';' -
永远不要使用字母 el (
l) 作为变量名,因为它看起来太像第一个 (1) 并且会混淆你的代码。大写字母 oh (O) 与数字零 (0) 同上。