테이블이 있고 쉘 스크립트에서 열의 역순으로 행을 추출하고 싶습니다.

테이블이 있고 쉘 스크립트에서 열의 역순으로 행을 추출하고 싶습니다.

테이블은 다음과 같습니다.

1|Hunk|First|London
2|Hero|Second|London
3|Will|First|Pow
4|Thomas|Second|Pow
5|Venus|First|Berlin

출력을 다음과 같이 인쇄하고 싶습니다.

Berlin|First|venus|5

마지막 줄만 인쇄하고 싶습니다.

답변1

펄 사용:

perl -alne 'print reverse split /(\|)/'

(혼란을 드려 죄송합니다)

또는...

perl -alne 'print reverse /[|]|[^|]+/g'

답변2

또는 테이블의 출력을 sed로 파이프할 수 있습니다.

$ cat filename | sed -r 's/(.*)\|(.*)\|(.*)\|(.*)/\4\|\3\|\2\|\1/g'

답변3

이 시도,

 awk -F '|' '{for (i=NF;i>0;i--){if (i!=1) printf $i"|"; else printf $i};printf "\n"}' file.csv

London|First|Hunk|1
London|Second|Hero|2
Pow|First|Will|3
Pow|Second|Thomas|4
Berlin|First|Venus|5

마지막 줄만 인쇄

awk 'END{print}' file.csv | awk -F '|' '{for (i=NF;i>0;i--){if (i!=1) printf $i"|"; else printf $i};printf "\n"}' 

답변4

완료하려면 다음 명령을 사용하십시오.

 k=`awk '{print NR}' u.txt | sed -n '$p' `
z=`awk -F "|" '{print NF}' u.txt | sort |uniq`
praveen@praveen:~$ for ((i=1;i<=k;i++)); do for ((j=$z;j>=1;j--)); do awk -v i="$i" -v j="$j" -F "|" 'NR==i{print $j}' u.txt ; done| perl -pne "s/\n/ /g"| awk '{print $0"\n"}'|sed -r "s/\s+/|/g"| sed "s/|$//g"; done| sed '/^$/d'

산출

k=`awk '{print NR}' u.txt | sed -n '$p' `
z=`awk -F "|" '{print NF}' u.txt | sort |uniq`
for ((i=1;i<=k;i++)); do for ((j=$z;j>=1;j--)); do awk -v i="$i" -v j="$j" -F "|" 'NR==i{print $j}' u.txt ; done| perl -pne "s/\n/ /g"| awk '{print $0"\n"}'|sed -r "s/\s+/|/g"| sed "s/|$//g"; done| sed '/^$/d'

London|First|Hunk|1
London|Second|Hero|2
Pow|First|Will|3
Pow|Second|Thomas|4
Berlin|First|Venus|5

관련 정보