逆順にラインを出力する方法は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
明示的なコードを使用してコードを記述します。print
1
{
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'
。