私は長いファイルの列2から正確な数を抽出するためにgrepを使用しています。
次のコードを使用しています。
grep -e "^71161 |^71072 |^72617 " mainfile > outputfile
これは効果がありません。outputfile
助けてください。
私のファイルは次のとおりです。
Date ID STN SUPER LAT LONG OBS VAR
2014060106 71072 146 S000438 48.37 270.68 2 0
2014060106 71108 12 71108 49.03 237.63 0 0.04
2014060212 71108 12 71108 49.03 237.63 0 0.16
2014060212 71120 12 71120 54.4 249.73 0 0
2014060212 71123 12 S000400 53.32 246.42 0 0.11
2014060212 71125 12 S000961 54.13 251.48 0.05 0.00
2014060212 71140 12 S000388 49.92 260.05 2 0.21
2014060212 71150 146 71150 50.45 259.4 1 2.21
答え1
awk
より良いオプションは次のとおりです。
awk 'BEGIN{a[71161] a[71072] a[72617]}; $2 in a' < mainfile
または:
awk '$2 ~ /^(72617|71072|71161)$/' < mainfile
または:
awk '$2 == "71161" || $2 == "71072" || $2 == "72617"' < mainfile
(POSIX awk実装を使用すると(現在のLinuxディストリビューションでは一般的な実装ではありませんが)、==
文字列に適用される演算子は2つの文字列が等しいかどうかをテストします。同じものを整理する、これは次のように異なる場合があります。平等。たとえば、UTF-8ロケールのGNUシステムでは、POSIX awkは"71161" == "٧١١٦١"
trueを返します。したがって、これを防ぐために)LC_ALL
に設定することをお勧めしますC
。
あなたもできます。数字比較する:
awk '$2 == 71161 || $2 == 71072 || $2 == 72617' < mainfile
また、71161.0、71.161e3、または0x115f9の2番目のフィールドを持つ行を返します(GNUの場合はawk
16進数を考慮するために環境でPOSIXLY_CORRECTを渡す必要があります)。