如何从行转换为列?

我有一个.txt文件,其数字排序如下(在同一行):

106849_01373 106849_01967 106850_00082 23025.7_01059 

我想像他们那样转换它们:

 106849_01373 106849_01967 106850_00082 23025.7_01059 

我不知道使用哪个命令。 有人可以帮我这个吗?

这是一个与xargs

 xargs -n1 < file.txt 

演示:

 $ cat file.txt 106849_01373 106849_01967 106850_00082 23025.7_01059 $ xargs -n1 < file.txt 106849_01373 106849_01967 106850_00082 23025.7_01059 

tr很容易:

 tr -s '[:blank:]' '\n'  

例:

 % cat file.txt 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059 % tr -s '[:blank:]' '\n'  

heemayl的答案是要走的路,但是这里有一个使用Perl的替代方案:

 perl -lane '$,="\n"; print(@F)' file.txt 
  • -l :启用自动行结束处理。 它有两个独立的效果。 首先,当与-n或-p一起使用时,它会自动选择$ /(输入记录分隔符)。 其次,它将$ \(输出记录分隔符)赋值为octnum,以便任何print语句都重新添加该分隔符。 如果省略octnum,则将$ \设置为当前值$ /。
  • -a :与-n或-p一起使用时打开自动分割模式。 对@F数组的隐式拆分命令是由-n或-p生成的隐式while循环中的第一个内容。
  • -n :使Perl在程序周围采用以下循环,这使得迭代文件名参数有点像sed -n或awk:

     LINE: while (<>) { ... # your program goes here } 
  • -e :可用于输入一行程序;

  • $,="\n" :将输出字段分隔符设置为换行符;
  • print(@F) :打印由输出字段分隔符分隔的字段。
 % cat file.txt 106849_01373 106849_01967 106850_00082 23025.7_01059 % perl -lane '$,="\n"; print(@F)' file.txt 106849_01373 106849_01967 106850_00082 23025.7_01059 

AWK方法。 基本上更改字段的输出分隔符和循环。 测试文件是您在最后使用ENDLINE一遍又一遍地粘贴的示例

 $ awk 'BEGIN{OFS="\n"}{for(i=1;i<=NF;i++) print $i}' some_data 106849_01373 106849_01967 106850_00082 23025.7_01059 ENDLINE 106849_01373 106849_01967 106850_00082 23025.7_01059 ENDLINE 106849_01373 106849_01967 106850_00082 23025.7_01059 ENDLINE 

使用sed

 sed -e 's/\s\{1,\}$//' -e 's/\s\+/\n/g' file.txt > split_file.txt 

我只是为了好玩添加一个Python解决方案:

 python3 -c 'import sys; f=open(sys.argv[1]); print(*f.read().split(),sep="\n")' mytestfile 

此命令在“单引号”中运行单行Python 3脚本,其中包含要作为参数转换的文件名。 语法是这样的:

 python3 -c 'PYTHON_COMMAND_OR_1-LINE-SCRIPT' ARGUMENTS 

我们使用的1行脚本就是这样(为了清晰起见,扩展到多行):

 import sys f=open(sys.argv[1]) print(*f.read().split(),sep="\n") 

它导入sys模块以读取命令行参数,将第一个给定参数作为文件名打开,并在一行中从文件中打印每个空格分隔的数据块。

 $ cat mytestfile 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059 $ python3 -c 'import sys; f=open(sys.argv[1]); print(*f.read().split(),sep="\n")' mytestfile 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059 106849_01373 106849_01967 106850_00082 23025.7_01059