테이블을 생성했지만 숫자가 엉망입니다.
0.967662 0.850492 0.935517 325969
1.071937 0.976805 1.086638 526410.1
0.972091 0.871967 0.950352 306079
1.048607 0.925483 1.008793 412640.1
1.002087 0.888653 0.977475 188199
1.147052 1.029975 1.126825 285331.1
1.062427 0.960176 1.040016 282640.1
1.019481 0.886356 0.974687 980210.1
0.973101 0.857897 0.929414 588859
뿐만 아니라 마지막 열의 숫자도 반전되어 있습니다. 예를 들어, 325969.0
실제로는 이어야 합니다 0.969523
.
결과는 다음과 같아야 합니다.
0.967662 0.850492 0.935517 969523
1.071937 0.976805 1.086638 1.014625
0.972091 0.871967 0.950352 970603
1.048607 0.925483 1.008793 1.046214
1.002087 0.888653 0.977475 991881
1.147052 1.029975 1.126825 1.133582
1.062427 0.960176 1.040016 1.046282
1.019481 0.886356 0.974687 1.012089
0.973101 0.857897 0.929414 958885
이 문제를 어떻게 해결하나요?
답변1
perl -lane '$n = reverse pop @F; print join " ", @F, $n' file
0.967662 0.850492 0.935517 969523
1.071937 0.976805 1.086638 1.014625
0.972091 0.871967 0.950352 970603
1.048607 0.925483 1.008793 1.046214
1.002087 0.888653 0.977475 991881
1.147052 1.029975 1.126825 1.133582
1.062427 0.960176 1.040016 1.046282
1.019481 0.886356 0.974687 1.012089
0.973101 0.857897 0.929414 958885
답변2
awk를 사용하여 도우미 함수를 통해 필드를 반전합니다.
function reverse(str) {
trs=""
for(i=length(str); i > 0; i--) {
trs=trs substr(str, i, 1);
}
return trs
}
{
$4=reverse($4);
print;
}
파일에 저장하고 다음을 실행합니다 awk -f that-file-above < input > output
.
예제 입력에 따른 결과는 다음과 같습니다.
0.967662 0.850492 0.935517 969523
1.071937 0.976805 1.086638 1.014625
0.972091 0.871967 0.950352 970603
1.048607 0.925483 1.008793 1.046214
1.002087 0.888653 0.977475 991881
1.147052 1.029975 1.126825 1.133582
1.062427 0.960176 1.040016 1.046282
1.019481 0.886356 0.974687 1.012089
0.973101 0.857897 0.929414 958885
답변3
#!/bin/bash
var=$(cat file | column -t | cut -d ' ' -f 7 | rev)
var1=$(cat file | awk '{print $1, $2, $3}')
paste <(echo "$var1") <(echo "$var") --delimiters ' '
참고: 이는 질문 텍스트에 붙여넣은 데이터를 처리하며, 이는 원본 문서의 데이터와 다를 수 있습니다. 데이터에 따라 (명령 awk
및) 열 수를 조정하십시오.cut