如何从行转换为列?

如何从行转换为列?

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

106849_01373    106849_01967    106850_00082    23025.7_01059   

我想像这样转换它们:

106849_01373
106849_01967
106850_00082
23025.7_01059

我不知道该使用哪个命令。有人能帮我吗?

答案1

相当容易tr

tr -s '[:blank:]' '\n' <file.txt

例子:

% 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' <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

答案2

这是一个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

答案3

heemayl 的答案是正确的,但是这里有一个使用 Perl 的替代方法:

perl -lane '$,="\n"; print(@F)' file.txt
  • -l: 启用自动行结束处理。它有两个不同的效果。首先,当与 -n 或 -p 一起使用时,它会自动剪切 $/(输入记录分隔符)。其次,它为 $\(输出记录分隔符)分配 octnum 的值,以便任何打印语句都会重新添加该分隔符。如果省略 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

答案4

使用sed

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

相关内容