我有这样的file.txt
有必要使用脚本或命令使其看起来如下:
我试着使用sort -k2,2nr file.txt --它可以工作,但是我也更改了中间的列)也许您可以帮助我做一些事情,我也知道AWK可以使用$中指定的列,但是我不知道如何正确地完成它
发布于 2022-11-14 20:15:20
建议使用这个简化的awk脚本:
script.awk
{ # read each line from input file, NR is internal variable `Number of Row`
arr1[NR] = $1; # read column #1 into arr1
arr2[NR] = $2; # read column #2 into arr2
arr3[NR] = $3; # read column #3 into arr3
}
END { # post processing after reading input file.
for (i = NR; i > 0; i--){ # reverse read the arrays from top to bottom
print arr1[i], arr2[NR + 1 - i], arr3[i]; # orderly output arr1, arr3, but reverse order arr2
}
}running:
awk -f script.awk input.txt发布于 2022-11-15 00:07:35
这可能适用于您(GNU排序、sed和cat):
sort -k2,2n file |
sed -E 's/^\S+ (\S+).*/s#\\S+#\1#2/' |
cat -n |
sed -Ef - <(sort -k2,2nr file)按升序排序文件的第2列。
提取列2并将这些值转换为sed替换脚本。
将行号应用于上述脚本。
将脚本应用于按第2列按降序排序的同一文件。
使用粘贴的相同效果:
paste <(sort -k2,2nr file) <(sort -k2,2n file) |
sed -E 's/^(\S+) \S+ (\S+)\t\S+ (\S+) .*/\1 \3 \2/'https://stackoverflow.com/questions/74436878
复制相似问题