如何使用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
答案 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