読み込み中に linux 列 3 が列 2 より小さい場合、列を切り替えます。

読み込み中に linux 列 3 が列 2 より小さい場合、列を切り替えます。

以下の項目を含むタブ区切りファイルがあります。

1 4 10 猫

1 10 4個

列3が列2より小さい場合は、次のように切り替えるように処理したいと思います。

1 4 10 猫

1 4 10個

このスクリプトはそれを取得するようですが、基準を満たさない列のみを出力するので、出力は次のようになります。

1 4 10 猫

while read field1 field2 field3 field4; do
  if [[ "$field2" -gt "$field3" ]] ; then 
      awk '{t=$field2; $field2=$field3; $field3=t; print; } '
  fi
done < filename.txt

私が何か愚かな間違いを犯したことは確かですが、まだ一度も見たことがありません。

答え1

awk '$3 < $2 { temp=$3; $3=$2; $2=temp } { print }' /path/to/file

関連情報