역순으로 라인을 출력하는 방법은 무엇입니까 awk
? 나는 다음 구조를 사용합니다.
{
for (i = NF; i > 1; i--){
print $i
}
}
하지만 문자열에서 한 단어만 인쇄합니다.
앞으로:
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'
.