![](/img/trans.png)
[英]Change numbers to specific name in properly step in two different columns by using bash script (awk, sed, etc)
[英]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.