文字列を含む行を見つけて、awkを使用してその行とテキストファイルのすべての後続の行を返します。

文字列を含む行を見つけて、awkを使用してその行とテキストファイルのすべての後続の行を返します。

重複した内容についてお詫び申し上げます。しかし、私が経験した問題のほとんどは、行のフィールドから特定の値を取得するか、既知のファイルからtail最後の行を取得することに関連しています。nn先験的に。一致する値を持つ行を見つけて、その行と後続のすべての行のすべてのフィールドを取得します。詳細は次のとおりです。

データベースの検索に使用されるクエリ基準に関する情報を含む、さまざまな数のメタデータヘッダー行を含むオンラインデータベースから返されたデータファイルがあります。このヘッダー行の後にはきちんとしたデータフレームがあります。例:

Query date: February 3, 2020, 1:34:57 PM
Database: <database name>
\n
Search criteria:
\n
Geographic bounding box coordinates: -130.00 20.00; -130.00 24.00; -120.00 24.00; -120.00 20.00
Sample type: rocks > sediments > dust
\n
SAMPLE ID,REFERENCE,LONGITUDE,LATITUDE,X,Y,Z,A
56,Author (YYYY) Title: Journal,-127.3,22,1.7,2.3,0,0.55
56,Author (YYYY) Title: Journal,-127.34,22.4,1.9,1.3,0.5

以下を使用して、データフィールド名を含む行を正常に見つけました。

SID=$(awk -F, '{ if ($1 == "SAMPLE ID") print NR }' data.csv)

echo $SID9予想通りに返却

これで、その行のフィールド名とデータを含むすべての後続の行を取得して新しいファイルに送信したいと思います。つまり、入力ファイル全体を解析し、その行を新しいファイルにNR >= $SID送信したいと思います。

これは私が使用したコードですが、いくつかの行を除くほとんどすべてのデータを返します。目的のデータを取得する方法やデータを含む行を省略する理由を理解できません。

awk -F, -v r=$SID '{ if (NR >= $r) print $0}' data.csv > output.csv

これが私の予想結果です。

SAMPLE ID,REFERENCE,LONGITUDE,LATITUDE,X,Y,Z,A
56,Author (YYYY) Title: Journal,-127.3,22,1.7,2.3,0,0.55
56,Author (YYYY) Title: Journal,-127.34,22.4,1.9,1.3,0.5

どんな助けでもいいでしょう!明確でなければ、awkに完全に初めて触れたのです!つまり、良い学習入門資料へのリンクも歓迎します。

ベストアンサー1

awk ではth$rの値を表します。r 大地、それ自体の価値ではなくr$r次に置き換えると、ソリューションが機能しますr

awk -F, -v r=$SID '{ if (NR >= r) print $0}' data.csv

または(より慣用的に使用基本的な印刷ジョブ)

awk -F, -v r=$SID 'NR >= r' data.csv

ただし、実際には2つのステップで行う必要はありません。

awk -F, '$1 == "SAMPLE ID" {p=1} p' data.csv

または(CSV構造を完全に無視して)

awk '/^SAMPLE ID,/{p=1} p' data.csv

また、動作する必要があります。

おすすめ記事