如何使用awk找出某​​一行中的字段数?

时间:2012-12-27 15:20:12

标签: linux bash awk

如何使用awk找出某一行中的字段数,如果只有一个字段,我想在该行的末尾添加一些内容?

$ cat myFile
0: stackoverflow com
1: w3 org
2:
3: wikipedia org
4: 

我希望输出如下:

$ cat myFile
0: stackoverflow com
1: w3 org
2: NULL
3: wikipedia org
4: NULL

4 个答案:

答案 0 :(得分:4)

添加字段数的测试:

awk 'NF==1 { print $0, "NULL"; next }1' file

结果:

0: stackoverflow com
1: w3 org
2: NULL
3: wikipedia org
4: NULL

答案 1 :(得分:1)

$ awk '{if (NF==0){print "NULL"}else print $0}' /tmp/myFile
stackoverflow com
w3 org
NULL
wikipedia org
NULL

NF是awk特殊变量,意思是Number(of)Fields。这将是包含值的NumberOfFields。如果您的数据确实有编号行,则可以将值与NF==1进行比较。我原以为这是使用编号实用程序或编辑器的工件。

else语句表示“任何字段数不为0的记录,因此会打印包含1个或多个字段的记录。

IHTH

答案 2 :(得分:1)

sed答案(我知道我不在话题):

sed 's/^\([[:digit:]]\+:\)[[:space:]]*$/& NULL/g' myFile

bash答案(仍然偏离主题):

while read -a a; do
    if [[ -z "${a[1]}" ]]; then
        echo "$a NULL"
    else
        echo "${a[@]}"
    fi
done < myFile

皮肤猫的方法不止一种!

答案 3 :(得分:1)

 awk  'BEGIN{FS=OFS=":"}!$2{$2=" NULL"}1' file

试验:

kent$  cat test.txt 
0: stackoverflow com
1: w3 org
2:
3: wikipedia org
4:


kent$  awk  'BEGIN{FS=OFS=":"}!$2{$2=" NULL"}1' test.txt
0: stackoverflow com
1: w3 org
2: NULL
3: wikipedia org
4: NULL