Unixは最後のフィールドを取得します。

Unixは最後のフィールドを取得します。

最後のフィールドを持つファイルから複数のフィールドを抽出する必要があります。ファイルの構造が異なる可能性があるため、最後のフィールドをハードコードできません。 2つの異なるファイルの例を見てみましょう。

ファイル1

a,b,c
d,e,f

その他のファイル File2

a,a,a,a
b,b,b,b

要件は、ファイル 1 から最初のフィールドと最後のフィールドを抽出するのと同じ場合もあり、要件は、ファイル 2 から 2 番目と最後のフィールドを抽出するのと同じ場合もあります。

抽出するフィールドが記載されているが最後のフィールドが共通である構成テーブルからこの要件を取得します。 1つの方法はwhileループを使用することです。しかし、whileループなしでこれを達成する方法はありますか?

答え1

awkを使用してください:

awk -F, '{print $1,$NF}' file

答え2

次の 2 つの例では、正しい方向に進むことができます。

echo {a..z} | awk '{print $1" "$NF}'

a=1; b=5; echo {a..z} | awk -v a=$a -v b=$b '{print $a" "$b}'

あなたの場合の使用法は次のとおりです。

awk <options> myFile
  • awk$n変数は入力行のn番目のフィールドです。
  • NFフィールド数の場合、$NF行の最後のフィールドです。
  • を使用して入力フィールド区切り文字を指定することもできます-F<character>。ここでは:-F,

答え3

低レベルソフトウェアツールbashpasteおよび使用するcut方法rev:

paste -d, <(cut -d, -f1 File1) <(rev File1 | cut -d, -f1 | rev)

出力:

a,c
d,f

注:指定されていないコンテンツは抽出できないためrevcut最後柱。しかし、cutいつでも抽出できます。最初列がrev用意されています。

関連情報