0

を使用して特定の行のフィールド数を確認するには、フィールドawkが1つしかない場合は、その行の最後に何かを追加しますか?

$ 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 '{if (NF==0){print "NULL"}else print $0}' /tmp/myFile
stackoverflow com
w3 org
NULL
wikipedia org
NULL

NFNumber(of)Fieldsを意味するawk特殊変数です。これは、値が含まれる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 に答える
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 に答える