Ign*_*ams 139
对于cut(1)手册页:
使用-b,-c或-f中的一个,只有一个.每个LIST由一个范围组成,或由逗号分隔的多个范围组成.选定的输入按照与读取相同的顺序写入,并且只写入一次.
它首先到达字段1,然后打印,然后是字段2.
awk改为使用:
awk '{ print $2 " " $1}' file.txt
Run Code Online (Sandbox Code Playgroud)
Jus*_*ser 59
你也可以同时cut和paste:
paste <(cut -f2 file.txt) <(cut -f1 file.txt)
Run Code Online (Sandbox Code Playgroud)
通过评论:可以避免bashisms并删除一个切割实例:
paste file.txt file.txt | cut -f2,3
Run Code Online (Sandbox Code Playgroud)
只使用shell,
while read -r col1 col2
do
echo $col2 $col1
done <"file"
Run Code Online (Sandbox Code Playgroud)
您可以使用Perl:
perl -ane 'print "$F[1] $F[0]\n"' < file.txt
Run Code Online (Sandbox Code Playgroud)
运行perl的优点是(如果你知道Perl)你可以在F上进行比重新排列更多的计算.
使用join:
join -t $'\t' -o 1.2,1.1 file.txt file.txt
Run Code Online (Sandbox Code Playgroud)
笔记:
-t $'\t'在GNU join更直观-t '\t' 没有的$失败,(coreutils的 v8.28和更早?); 这可能是一个错误,$应该需要一种解决方法。请参阅:unix join separator char。
join需要两个文件名,即使只有一个文件正在处理。两次使用相同的名称可以join执行所需的操作。
对于资源join较少的系统,其占用空间比其他答案中使用的一些工具要小:
wc -c $(realpath `which cut join sed awk perl`) | head -n -1
43224 /usr/bin/cut
47320 /usr/bin/join
109840 /bin/sed
658072 /usr/bin/gawk
2093624 /usr/bin/perl
Run Code Online (Sandbox Code Playgroud)