誰かがこれが何をしているのか教えてもらえますか?
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
これは、最初のフィールドをフォーマットされた表現に置き換え、対応する行を出力します。