2017-10-27 7 views
1

見つけるこれが私のファイルです:FILEABC.txtレコードが長い/特定の鞍部より短い

Name|address|age|country 
john|london|12|UK 
adam|newyork|39|US|X12|123 
jake|madrid|45|ESP 
ram|delhi 
joh|cal|34|US|788 

私は、ファイルのヘッダ数を探していました。だから私はこのコマンドを持っている

cat FILEABC.txt | awk --field-separator = '|' '{print NF}' |ソート-n |私はこのcmdの取得UNIQ -c

結果は

猫ですFILEABC.txt | awk --field-separator = '|' '{print NF}' |ソート-n | uniqの-c

1 2 
    3 4 
    1 5 
    1 6 

私の要件は、どのように私は私のファイルからのように唯一の2つのフィールド、4つのフィールドとを持っているそれらのレコードを見つけるか、ということです。 EX用 、

のみ2 COL持つレコードを表示する場合:あなただけ印刷したい場合は

adam|newyork|39|US|X12|123 
+0

シンプル 'NFの== 2'と' NF> 4'等々? – Sundeep

+0

フィールドが4つ以上あるレコードを探したい場合はどうすれば –

+0

をawkに入れるか教えてください。私はこれに新しいです –

答えて

1

:RECの持つ4つ以上のCOLを見たい場合は

ram|delhi 

を次の2つのフィールドを持つレコードは、同じことをお手伝いすることがあります。レコードのあらゆる種類の

awk -F"|" 'NF==2' Input_file 

あなたはその後、 NF>4に条件上記の変更以上の4つのフィールドを持つ行を必要とするか、5つの以上のフィールドを持つ行が必要な場合など - > NF>5

説明: BYを行うことによって-F"|"私はフィールドのセパレータがここにパイプであることを確認しています。NFは、フィールドの数が多いかどうかを確認するために、ラインのフィールドの総数を定義する変数awkです。ここで2よりも、このc onditionはTRUEであり、現行の行を印刷します(ここでは、awkは条件とアクションのメソッドで動作するため、ここでTRUEの場合は何も言及せず、デフォルトで行を印刷します)。awkを使用して

1

、変数NFはそうあなたが何ができるかで、あなたはFSを変更した場合、それが言及したフィールドセパレータに基づいてNFを計算します、フィールドセパレータとして単一のスペースを使用して、デフォルトawkにより、レコード/行のフィールドの合計数を示します4つの以上のフィールドについて

# Usual Syntax : awk 'condition { action }' infile 

awk -v FS='|' 'NF==2{ print }' infile 

同じである

awk -v FS='|' 'NF==2' infile 

awk -v FS='|' 'NF > 4' infile 
1

あなたはまた、2-columedレコードをフィルタリングするはgrepを使用することができます。

grep '^[^|]*|[^|]*$' FILEABC.txt 

これます出力:

ram|delhi 
関連する問題