awkを使って1行の単語を逆順に出力します。

awkを使って1行の単語を逆順に出力します。

逆順にラインを出力する方法はawk?私は次の構造を使用します。

{
 for (i = NF; i > 1; i--){
 print $i
}
}

しかし、文字列から1単語だけを印刷します。

今後:

apple pen dog cat

後ろに:

cat dog pen apple

答え1

awk '
    {
        for (i=NF; i>=1; i--) {
            printf "%s%s", $i, i == 1 ? ORS : OFS
        }
     }
' file

答え2

使用レーン:

perl -lane 'print join " ", reverse @F' file

答え3

OFS印刷する前に現在のレコードのフィールドを置き換えるバリアントです(-v出力フィールド区切り文字がコマンドライン(使用)またはコードの他の場所に設定されている場合は、現在の値が使用されますawk)。

$ awk '{ for (i = 1; i < NF/2; ++i) { t = $i; $i = $(NF-i+1); $(NF-i+1) = t } }; 1' file
cat dog pen apple

基本操作を呼び出す条件付き短縮の代わりにawk明示的なコードを使用してコードを記述します。print1

{
    for (i = 1; i < NF/2; ++i) {
        # swap $i and $(NF-i+1)
        t = $i
        $i = $(NF-i+1)
        $(NF-i+1) = t
    }

    print
}

答え4

GNUを使用しawk、フィールド間の元の間隔を維持します。

gawk -v FPAT='[[:space:]]+|[^[:space:]]+' -v ORS= '
   {for (i = NF; i > 0; i--) print $i; print RT}'

入力すると" foo bar baz"出力されます"baz bar foo "

入力がロケールに対して正しくエンコードされたテキストであるとします。

入力でMS-DOS行区切り文字を使用している場合は、キャリッジリターンで始まる行で終わります。次の手順で調整する必要があります-v RS='\r?\n'

関連情報