0

如何使用 找出某一行中的字段数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

4 回答 4

4

添加对字段数的测试:

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

结果:

0: stackoverflow com
1: w3 org
2: NULL
3: wikipedia org
4: NULL
于 2012-12-27T15:33:28.333 回答
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
于 2012-12-27T15:35:08.547 回答
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语句的意思是“任何字段不为零的记录,因此将打印具有 1 个或多个字段的记录。

IHTH

于 2012-12-27T15:27:25.933 回答
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

给猫剥皮的方法不止一种!

于 2012-12-27T15:34:08.647 回答