2016-09-09 4 views
0

linuxには、スペースで区切られた行があるファイルがあります。UNIXコマンド操作

This is linux file 
This is linux text 
This is linux file 1 
This is linux file 3 

ここでは、5行目がファイルの行にある行だけを出力します。この例では、私の出力は3行目と4行目(1列目と3列目は5列目)にする必要があります

これを行うにはどうすればよいですか?

+0

なぜこの質問に「awk」の助けを得ていない、または要求していないときに、この質問は「awk」のヘルプを要求している人にとって重複とマークされていましたか? –

答えて

0

これは、次の転写物あたりとして、awkとそのNF(フィールドの数)変数を使用して行うことができます。

pax$ cat inputFile 
This is linux file 
This is linux text 
This is linux file 1 
This is linux file 3 

pax$ awk 'NF >= 5 {print}' inputFile 
This is linux file 1 
This is linux file 3 

awkコマンドの基本的な形は、pattern { action }あるので、これは動作します。

パターンは、それらの行(およびは、BEGINENDパターンと同様に行が、ではないことを、時には物事)一定の基準を満たしており、アクションが何をすべきかを指示する選択します。

この場合、5つ以上のフィールドを持つ行を選択し、単純に印刷します。

+0

デフォルトのアクションは 'print'なので、これは' awk 'に単純化することができますNF> = 5'' – hek2mgl

+0

ありがとうPax! –

0

awkに加えて、少なくとも5つのフィールドに各行を読み込み、5番目のフィールドに値が入力されていることを確認することで、非常に簡単にbash(またはいずれかのシェル)で行うこともできます。あなたのデータを使用して、このような何か動作します(名前が指定されていない場合、それは最初の引数(またはstdinとして与えられたファイル名から読み込まれます))

#!/bin/bash 

fn="${1:-/dev/stdin}" 

while read -r f1 f2 f3 f4 f5; do 
    [ -n "$f5" ] && printf "%s %s %s %s %s\n" "$f1" "$f2" "$f3" "$f4" "$f5" 
done <"$fn" 

、スニペットは、上記の生成します次の出力:

$ bash prn5flds.sh dat/5fields.txt 
This is linux file 1 
This is linux file 3 

(注:お使いのシェルによっては、readはまたは-rオプションをサポートしていない可能性がありそうでない場合は、単にそれを省略します。)

+0

Davidさん、ありがとうございます! –

+0

喜んで助けてください。奇妙なことに、あなたの質問に「awk」の助けがない、または助けを要求していないときに、あなたの質問が 'awk'の助けを求める質問の重複としてマークされました。行く図... –