我有一个文件:
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
的任何简短解决方案感兴趣。
我在python中使用for
循环创建了一些内容,如果col1>检查每一行。 col2,然后写一个新文件,但我不知道如何更简单地做到这一点。
答案 0 :(得分:4)
您可以像这样使用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
答案 1 :(得分:3)
作为Perl命令行程序:
perl -a -n -E'say join "\t", sort({ $a <=> $b } @F[0, 1]), $F[2]' file
答案 2 :(得分:1)
关注awk
可能对您有帮助。
awk '{printf("%s\t%s\n",$1>$2?$2 "\t" $1:$1 "\t" $2,$3)}' Input_file
说明: 只需使用printf
打印awk
的内置命令即可。然后在其中使用%s
2次,其中包含TAB,然后\n
新行,最后在新行上打印下一行。现在,在打印各自的值时,我使用条件运算符?
和:
所以如果第一个字段大于第二个字段则检查条件然后打印第二个字段TAB和第一个字段,如果不是则打印副反之亦然。
输出如下。
54 56 A
66 66 B
4 23 C
23 37 D
55 100 E