繁体   English   中英

使用bash / awk / perl / sed重新排列不同列中的值

[英]Rearrange values from different columns using bash / awk / perl / sed

我有一个文件:

54      56        A
66      66        B
23       4        C
23      37        D
100     55        E

我想重新排列它,以使第1列始终小于或等于第2列:

54      56        A
66      66        B
4       23        C
23      37        D
55     100        E

我对使用bash / perl / sed / awk任何简短解决方案感兴趣。

我用for循环在python中做了一些事情,检查col1> col2是否每一行,然后编写一个新文件,但是我不知道如何更简单地做到这一点。

您可以这样使用awk

awk -v OFS='\t' '$2 < $1{n=$2; $2=$1; $1=n} 1' file

54      56        A
66      66        B
4       23        C
23      37        D
55      100       E

作为Perl命令行程序:

perl -a -n -E'say join "\t", sort({ $a <=> $b } @F[0, 1]), $F[2]' file

跟随awk可能会对您有所帮助。

awk '{printf("%s\t%s\n",$1>$2?$2 "\t" $1:$1 "\t" $2,$3)}'   Input_file

说明:只需使用printf来打印awk的内置命令。 然后在其中使用TAB在%s使用2次,然后\\n最后换行以在新行上打印下一行。 现在,在打印它们各自的值时,我正在使用条件运算符? :因此在这里检查条件,如果第一个字段大于第二个字段,则打印第二个字段TAB和第一个字段,如果不是,则打印相同的内容,反之亦然。

输出如下。

54      56      A
66      66      B
4       23      C
23      37      D
55      100     E

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM