我有一个大文件中的数据(280列宽,700万行!)我需要交换前两列.我想我可以使用某种类型的awk for循环,打印$ 2,$ 1,然后一个范围到文件的末尾 - 但我不知道如何做范围部分,我不能打印$ 2 ,1美元,3美元...... 280美元!我在这里看到的大多数列交换答案都特定于具有可管理列数的小文件,所以我需要的东西不依赖于指定每个列号.
该文件是制表符分隔的:
Affy-id chr 0 pos NA06984 NA06985 NA06986 NA06989
Run Code Online (Sandbox Code Playgroud)
per*_*eal 92
您可以通过交换前两个字段的值来完成此操作:
awk ' { t = $1; $1 = $2; $2 = t; print; } ' input_file
Run Code Online (Sandbox Code Playgroud)
emi*_*-le 19
我在带有制表符分隔文件的Windows系统上尝试使用cygwin进行perreal的回答.它不起作用,因为标准分隔符是空格.
如果您遇到同样的问题,请尝试以下方法:
awk -F $'\t' ' { t = $1; $1 = $2; $2 = t; print; } ' OFS=$'\t' input_file
Run Code Online (Sandbox Code Playgroud)
-F $'\t'输入分隔符由输出分隔符和输出分隔符定义OFS=$'\t'.
awk -F $'\t' ' { t = $1; $1 = $2; $2 = t; print; } ' OFS=$'\t' input_file > output_file
Run Code Online (Sandbox Code Playgroud)
Pra*_*gar 10
尝试与您的问题更相关:
awk '{printf("%s\t%s\n", $2, $1)}' inputfile
Run Code Online (Sandbox Code Playgroud)
这可能对你有用(GNU sed):
sed -i 's/^\([^\t]*\t\)\([^\t]*\t\)/\2\1/' file
Run Code Online (Sandbox Code Playgroud)