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列目)にする必要があります
これを行うにはどうすればよいですか?
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列目)にする必要があります
これを行うにはどうすればよいですか?
これは、次の転写物あたりとして、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 }
あるので、これは動作します。
パターンは、それらの行(およびは、BEGIN
やEND
パターンと同様に行が、ではないことを、時には物事)一定の基準を満たしており、アクションが何をすべきかを指示する選択します。
この場合、5つ以上のフィールドを持つ行を選択し、単純に印刷します。
デフォルトのアクションは 'print'なので、これは' awk 'に単純化することができますNF> = 5'' – hek2mgl
ありがとうPax! –
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
オプションをサポートしていない可能性がありそうでない場合は、単にそれを省略します。)
Davidさん、ありがとうございます! –
喜んで助けてください。奇妙なことに、あなたの質問に「awk」の助けがない、または助けを要求していないときに、あなたの質問が 'awk'の助けを求める質問の重複としてマークされました。行く図... –
なぜこの質問に「awk」の助けを得ていない、または要求していないときに、この質問は「awk」のヘルプを要求している人にとって重複とマークされていましたか? –