我生成了一个表格,但数字弄乱了:
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