これはギャップをどのようにソートしますか?

これはギャップをどのようにソートしますか?

誰かがこれが何をしているのか教えてもらえますか?

cat infile|
awk ' 
{
 for(i=3;i<=NF;i++){ $2=$2" "$i } 
 printf "%-4s %s\n", $1,$2 ; 
}' > outfile.txt    

infile含む:

1 John Smith  
2 Bill Johnson  
...
5000 George Heiz  

その結果、すべての線が揃っていることがわかりますが、この部分が正確に何をしているのかoutfile.txtわかりません。
for(i=3;i<=NF;i++){ $2=$2" "$i }

ベストアンサー1

この awk スクリプトは複雑で非効率的なアプローチなので、次のように書き直すことができます。

awk '
{
 f=$1
 $1=""
 printf "%4d %s\n",f,$0 ;
}' infile > outfile.txt

後者のスクリプトはf変数の最初のフィールドを記録し、それを消去してから4文字でソートされたf変数を印刷し、元の行の残りの部分は変更されません。

作成者がレコードの残りの部分を維持しながら最初のフィールドをフォーマットする方法を理解していないようであるため、残りのフィールドはすべて奇数ループを使用して2番目のフィールドに配置します。

編集する:

riciはより簡単な方法を提案した。

awk '{$1 = sprintf("%4d", $1); print}' infile > outfile.txt

これは、最初のフィールドをフォーマットされた表現に置き換え、対応する行を出力します。

おすすめ記事