AWKを使用:さまざまな数のリンクフィールドを変数に割り当てる

AWKを使用:さまざまな数のリンクフィールドを変数に割り当てる

以前にこの質問を受けたことは本当に申し訳ありません。あまりにも基本的なようで、ドットをつなげていないので、狂っているようです!

デフォルトではテキストファイルがあり、特定の行の2番目のフィールドを変数に割り当てます。

VAR=$(awk 'NR==1 {print $2}' entry.txt)

ただし、時にはテキストファイルの最初の行に4つのフィールドがあることがあります。言いたい

   If ROW 1 has 4 fields  
        VAR = $2, $3 & $4 concatenated
   Else
        VAR = $2 

私はこれが基本的なawkであると確信しています。私はちょうど小さなプロジェクトを進めており、以前に使用したことがありません。本を読まなければならないことはわかりますが、これは本当に小さな台本です!

ありがとう

答え1

awk 'NF == 4 { print $2 $3 $4; exit } { print $2; exit }' file

ファイルの最初の行に正確に4つのスペースで区切られたフィールドがある場合、2番目、3番目、4番目のフィールドが連結されます。それ以外の場合は、ファイルの最初の行の2番目のフィールドを返します。プログラムは何も印刷した後に終了するので、これは私たちが見る最初の行だけであると確信しています。

他の論理として:

awk 'NF == 4 { out = $2 $3 $4 } NF != 4 { out = $2 } { print out; exit }' file

または、

awk '{ out = $2 } NF == 4 { out = out $3 $4 } { print out; exit }' file

次のいずれかのコマンドがコマンド置換に含まれます。

var=$( awk ... )

答え2

awk 'NR==1 && NF==4 { var=$2 $3 $4 } NR==1 && NF!=4 { var=$2 }' /path/to/input

答え3

あなたはできます

awk '{$1=""; print (NF==4)?$0:$2; exit}' OFS= infile

三項条件演算子は(NF==4)?$0:$2以下を確認します。窒素数量Fフィールドが4に等しい(フィールドがスペースで区切られている場合(アッ基本FS$0))次に、最初のフィールドを削除して行全体を印刷し$1=""、そうでない場合は:file#2を印刷します$2

関連情報