以前にこの質問を受けたことは本当に申し訳ありません。あまりにも基本的なようで、ドットをつなげていないので、狂っているようです!
デフォルトではテキストファイルがあり、特定の行の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
。