仅对文件的数字部分进行排序 bash
Sort numerical only part of the file bash
我的输入文件是:
b; 1 ; b; 1
a; 5 ; a; 5
g; 2 ; g; 2
我想要一个输出:
b; 1 ; b; 1
a; 5 ; g; 2
g; 2 ; a; 5
有人可以帮我解决这个问题吗?
$ paste -d';' <(cut -d';' -f1,2 file) <( cut -d';' -f3,4 file | sort -t';' -n -k2)
b; 1 ; b; 1
a; 5 ; g; 2
g; 2 ; a; 5
工作原理
这将从输入文件中选择前两列:
$ cut -d';' -f1,2 file
b; 1
a; 5
g; 2
这会从输入文件中选择后两列,然后在最后一列中按数字对它们进行排序:
$ cut -d';' -f3,4 file | sort -t';' -n -k2
b; 1
g; 2
a; 5
这使用进程替换,<(...)
,paste
两个部分重新组合在一起:
$ paste -d';' <(cut -d';' -f1,2 file) <( cut -d';' -f3,4 file | sort -t';' -n -k2)
b; 1 ; b; 1
a; 5 ; g; 2
g; 2 ; a; 5
我的输入文件是:
b; 1 ; b; 1
a; 5 ; a; 5
g; 2 ; g; 2
我想要一个输出:
b; 1 ; b; 1
a; 5 ; g; 2
g; 2 ; a; 5
有人可以帮我解决这个问题吗?
$ paste -d';' <(cut -d';' -f1,2 file) <( cut -d';' -f3,4 file | sort -t';' -n -k2)
b; 1 ; b; 1
a; 5 ; g; 2
g; 2 ; a; 5
工作原理
这将从输入文件中选择前两列:
$ cut -d';' -f1,2 file
b; 1
a; 5
g; 2
这会从输入文件中选择后两列,然后在最后一列中按数字对它们进行排序:
$ cut -d';' -f3,4 file | sort -t';' -n -k2
b; 1
g; 2
a; 5
这使用进程替换,<(...)
,paste
两个部分重新组合在一起:
$ paste -d';' <(cut -d';' -f1,2 file) <( cut -d';' -f3,4 file | sort -t';' -n -k2)
b; 1 ; b; 1
a; 5 ; g; 2
g; 2 ; a; 5